我最近收到了一个不寻常的请求,我遇到了最困难的问题,涉及在输入文本框时捕获所有显示字符。设置如下:
我有一个最大长度为 10 个字符的文本框。当用户尝试输入超过 10 个字符时,我需要通知用户他们的输入超出了字符数限制。
最简单的解决方案是将maxlength指定为 11,测试每个keyup的长度,然后截断回 10 个字符,但这个解决方案似乎有点笨拙。我更愿意做的是在keyup之前捕获字符,并根据它是否是显示字符,向用户显示通知并阻止默认操作。
由于我们处理大量国际数据,因此白名单将具有挑战性。
我玩过keydown、keypress和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;
};
}
});
});
我承认我正在做的事情可能是过度设计解决方案,但现在我已经投资了它,我想知道一个解决方案。