最近我收到了一个不寻常的请求,那就是我遇到了最困难的时间,涉及在输入文本框时捕获所有显示字符。设置如下:在JavaScript中捕获*所有*显示字符?
我有一个文本框,有maxlength 10个字符。当用户尝试键入超过10个字符时,我需要通知用户他们正在输入超出字符数限制。
最简单的解决办法是指定最大长度的11,测试每个KEYUP长度,并截断回落到10个字符,但这种解决方案似乎有点缺憾。我想要做的是在keyup之前捕获字符,并根据它是否为显示字符向用户显示通知并阻止默认操作。
因为我们处理了大量的国际数据,所以白名单很具挑战性。
我打得周围的的keydown每一个组合,按键,并KEYUP,阅读event.keyCode,event.charCode,并event.which,但我可以”找到适用于所有浏览器的单一组合。我可以管理的最好的是以下在IE6,Chrome5,FF3.6中正常工作,但在Opera中失败:
注意:以下代码利用jQuery。
$(function(){
$('#textbox').keypress(function(e){
var $this = $(this);
var key = ('undefined'==typeof e.which?e.keyCode:e.which);
if ($this.val().length==($this.attr('maxlength')||10)) {
switch(key){
case 13: //return
case 9: //tab
case 27: //escape
case 8: //backspace
case 0: //other non-alphanumeric
break;
default:
alert('no - '+e.charCode+' - '+e.which+' - '+e.keyCode);
return false;
};
}
});
});
我会恩准我在做什么很可能超过了实际工程的解决方案,但现在我投资,我想知道一个解决方案。谢谢你的帮助!
也不要忘记用户PASTING数据到你的控制。 – vladr 2010-04-21 16:26:14
感谢您的提示。我已经想过实现一个onPaste处理程序,但是,鉴于输入的上下文,用户将粘贴到它的机会很渺茫(更不用说onPaste支持是多么的多余)。 – 2010-04-21 16:55:48