我无法正确处理input type="text"中的某些事件。我只需要一个过滤器来只接受 [^0-9] 字符。
我需要以下帮助:
- 不接受来自Control + Paste命令的任何内容。从 Control+V(键盘)或右键单击鼠标 + 粘贴选项。
到目前为止我尝试了什么:
按键事件我可以很好地处理来自键盘的任何输入。(任何不在 [^0-9] 中的字符和 enter、backspace、home、end 等都将被忽略)。
keyup 我奇怪地处理 Control + Paste(键盘)事件。我粘贴了一些字符串,粘贴字符串后,我裁剪了所有非白名单字符。PS: 但这不适用于右键单击+粘贴(鼠标),也不是
onChange 垃圾字符串保持可见,直到用户模糊该字段。
我想要的是:
复制示例字符串“123.321.456-78”并粘贴“12332145678”或“abc!2¨#7”并粘贴“27”。
不要以任何可能的方式接受任何非白名单字符。(即使使用 $('#field').val("trash input 123")。
从上述所有问题中,我可以很好地或奇怪地(又名:keuup)处理输入,但是右键单击 + 粘贴(鼠标)永远不会触发任何事件,所以我可以进行正确的处理。
我想过做间隔检查,但这太丑陋了。
编辑:
下面的代码
function soNumeroInteiro_keypressHandler(event)
{
var code = event.keyCode || event.which;
switch(code)
{
case 8: // backspace
case 37: // left
case 39: // right
case 9: // tab
case 46: // delete
case 35: // end
case 36: // home
return true;
break;
case 86: // control + A
case 97: // control + V
case 120: // control + X
if (event.ctrlKey) {
return true;
}
break;
}
var tecla = String.fromCharCode(code);
return tecla.match(/^\d$/) != null;
}
function soNumeroInteiro_keyupHandler(event)
{
event.currentTarget.value = event.currentTarget.value.replace(/[^0-9]/g, '');
}