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使用的计数器脚本会出错.尝试输入,你会发现它(错误地)计为两个字符.
小智 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,它会在添加字符后触发.
您应该将函数绑定到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)
| 归档时间: |
|
| 查看次数: |
186842 次 |
| 最近记录: |