如何使用JavaScript检查字符串长度

Nul*_*teя 41 javascript forms

我希望在按下键时获得字符串长度,就像StackOverflow那样.

显示长度的StackOverflow示例

我曾试图这样做onblur,但它不起作用.我该怎么做呢?

Mat*_*ens 44

至于哪些事件应该用于这种用途的问题:使用input活动,并回落到keyup/ keydown旧的浏览器.

这是一个DOM0风格的例子:

someElement.oninput = function() {
  this.onkeydown = null;
  // Your code goes here
};
someElement.onkeydown = function() {
  // Your code goes here
};
Run Code Online (Sandbox Code Playgroud)

另一个问题是如何计算字符串中的字符数.根据您对"字符"的定义,到目前为止发布的所有答案都不正确.只有在您确定只输入BMP Unicode符号时,string.length答案可靠.例如,'a'.length == 1正如您所期望的那样.

但是,对于补充(非BMP)符号,情况有点不同.例如,''.length == 2即使那里只有一个Unicode符号.这是因为JavaScript将UCS-2代码单元公开为"字符".

幸运的是,仍然可以通过一些hackery来计算JavaScript字符串中Unicode符号的数量.您可以使用Punycode.js的实用程序函数在UCS-2字符串和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`!)
Run Code Online (Sandbox Code Playgroud)

PS我刚刚注意到Stack Overflow使用的计数器脚本会出错.尝试输入,你会发现它(错误地)计为两个字符.

  • 感谢您指出了这一点.大多数英语使用者忽视了这个问 (4认同)
  • 这只是一个例子.随意用任何星体(即非BMP)Unicode符号替换它. (3认同)

小智 14

更新:自从我写这篇文章以来,输入事件得到了相当程度的支持.在IE9中它仍然不是100%,所以你必须等待一段时间才能完全淘汰IE9.然而,根据我对这个问题的回答,输入不仅仅是我所提出的方法的一个不错的替代品,所以我建议切换.

使用keyup事件

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

编辑:

对于那些暗示keydown的人来说只是一个注释.那不行.在将字符添加到输入框或textarea 之前,keydown会触发,因此值的长度将是错误的(落后一步).因此,唯一有效的解决方案是keyup,它会添加字符触发.

  • @bvukelic如果通过粘贴(不使用键盘)或拖动文本输入文本,则不会触发`keyup`事件; 或者,例如,在口述文本时.`input`事件确实如此.作为奖励,"输入"事件会在您抬起钥匙之前触发 - 使其感觉更快. (3认同)

Tri*_*Nhu 6

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

textarea.keyup = function(){
   textarea.value.length....
} 
Run Code Online (Sandbox Code Playgroud)

用jquery

$('textarea').keyup(function(){
   var length = $(this).val().length;
});
Run Code Online (Sandbox Code Playgroud)