【发布时间】:2012-06-21 12:52:40
【问题描述】:
我无法正确处理 input type="text" 中的某些事件。 我只需要一个过滤器来只接受 [^0-9] 字符。
我需要以下帮助:
- 不接受来自 Control + Paste 命令的任何内容。通过 Control+V(键盘)或右键单击鼠标 + 粘贴选项。
到目前为止我尝试了什么:
keypress 事件我可以很好地处理来自键盘的任何输入。 (任何不在 [^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, '');
}
【问题讨论】:
-
请出示您已有的代码。看看
element.onpaste。 -
@marcel-korpel 完成...看来 onpaste 将解决我的问题。我没有意识到它曾经存在过。我阅读了所有 jquery doc 并没有找到任何线索。
标签: javascript jquery events