如何用JavaScript检查string长度

我想获得像StackOverflow这样按下键时的string长度。

显示长度的StackOverflow示例

我试图用onblur做到这一点,但它不工作。 我该怎么做呢?

至于你应该使用哪个事件的问题: 使用input事件,并回退到旧版浏览器的keyup / keydown

下面是一个DOM0样式的例子:

 someElement.oninput = function() { this.onkeydown = null; // Your code goes here }; someElement.onkeydown = function() { // Your code goes here }; 

另一个问题是如何计算string中的字符数。 根据你的“性格”的定义,到目前为止发布的所有答案都是不正确的。 当你确定只有BMP Unicode符号被input时, string.length答案是可靠的。 例如, 'a'.length == 1 ,就像你所期望的那样。

但是,对于补充(非BMP)符号,事情有点不同。 例如, '𝌆'.length == 2 ,即使这里只有一个Unicode符号。 这是因为JavaScript将UCS-2代码单元暴露为“字符”

幸运的是,仍然有可能通过一些hackery来统计JavaScriptstring中的Unicode符号的数量。 您可以使用Punycode.js的实用函数在UCS-2string和Unicode代码点之间进行转换:

 // `String.length` replacement that only counts full Unicode characters punycode.ucs2.decode('a').length; // 1 punycode.ucs2.decode('𝌆').length; // 1 (note that `'𝌆'.length == 2`!) 

PS我只注意到堆栈溢出使用的计数器脚本得到这个错误。 尝试input𝌆 ,你会发现它(错误地)计为两个字符。

更新:由于我写了这个,input事件得到了体面的支持。 在IE9中仍然不是100%,所以你必须等待一段时间,直到IE9被完全淘汰。 然而,根据我对这个问题的回答,投入不仅仅是我提出的方法的一个体面的替代品,所以我推荐切换。

使用关键事件

 var inp = document.getElementById('myinput'); var chars = document.getElementById('chars'); inp.onkeyup = function() { chars.innerHTML = inp.value.length; } 
 <input id="myinput"><span id="chars">0</span> 

您应该将函数绑定到keyup事件

 textarea.keyup = function(){ textarea.value.length.... } 

与jQuery

 $('textarea').keyup(function(){ var length = $(this).val().length; }); 

快速和肮脏的方式将是简单绑定到keyup事件。

 $('#mytxt').keyup(function(){ $('#divlen').text('you typed ' + this.value.length + ' characters'); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type=text id=mytxt > <div id=divlen></div> 
  var myString = 'sample String'; var length = myString.length ; 

首先你需要定义一个按键处理程序或某种事件触发器来听,顺便说一句,得到的长度真的很简单,就像上面提到的

 function cool(d) { alert(d.value.length); } 
 <input type="text" value="" onblur="cool(this)"> 

我不确定你试过onblur是什么意思,但是为了得到任何string的长度,使用它的.length属性,所以在文本框或者textarea的情况下:

 document.getElementById("textarea").value.length 

改变这个ID,当然,不pipe实际的ID是什么。

基本上:为<textarea>元素分配一个keyup处理程序,在它里面计算<textarea>的长度,并且如果计数长度小于最小值,则将计数写入单独的<div>

这是一个例子 –

 var min = 15; document.querySelector('#tst').onkeyup = function(e){ document.querySelector('#counter').innerHTML = this.value.length < min ? (min - this.value.length)+' to go...' : ''; } 
 body {font: normal 0.8em verdana, arial;} #counter {color: grey} 
 <textarea id="tst" cols="60" rows="10"></textarea> <div id="counter"></div> 

留下回复(和问题标题的答案 ),对于未来的谷歌…

您可以使用.length来获取string的长度。

var x ='Mozilla'; var empty ='';

console.log('Mozilla是'+ x.length +'代码单元长');

/ *“Mozilla是7个单元长”* /

console.log('空string的长度为'+ empty.length');

/ *“空string的长度为0”* /

如果你打算得到一个textarea的长度 id="txtarea"那么你可以使用下面的代码。

 txtarea = document.getElementById('txtarea'); console.log(txtarea.value.length); 

你应该能够摆脱与BMP Unicode符号的使用。 如果你想支持像(😂)那样的“非BMP符号”,那么它是一个边缘情况,你需要find一些解决办法。

😂