我无法正确处理输入类型=“文字”中的某些事件。 我只需要一个过滤器来接受[^ 0-9]字符。
我需要以下帮助:
到目前为止我尝试了什么:
按键事件我很好地处理来自键盘的任何输入。 (任何不在[^ 0-9]中的字符和输入,退格键,主页,结尾等都将被忽略)。
keyup我处理怪异的Control + Paste(键盘)事件。 我粘贴一些字符串,在粘贴字符串后,我裁剪任何非白名单字符。 PS: 但是这不适用于右键单击+粘贴(鼠标),
onChange垃圾字符串保持可见,直到用户模糊字段。
我想要的是什么:
复制示例字符串“123.321.456-78”并粘贴“12332145678”或“abc!2¨#7”并粘贴“27”。
不要以任何可能的方式接受任何非白名单字符。 (即使是$('#field')。val(“垃圾输入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, '');
}
答案 0 :(得分:1)
请参阅此问题,了解鼠标点击事件:How to distinguish between left and right mouse click with jQuery
现在您有鼠标点击事件,即使是右键单击,您也可以在短时间内(2秒?)轮询内容以检测更改并处理内容验证。这样,您可以根据业务逻辑需要选择接受有效或拒绝内容。
编辑: 只是为了添加注释,onpaste事件将无法正常工作,因为它将在粘贴内容之前触发(至少在某些测试用例中)。
示例:
$('#pasteyMe').on('paste', function() {
$(this).val();// gets the content prior to the paste event
});
要解决此问题,您可以设置另一个事件观察程序,例如更改,然后触发:
$('#pasteyMe').on('click focus blur paste', function() {
var me = this;
window.setTimeout(function() {
$(me).trigger('change');
}, 1);
});
$('#pasteyMe').change(function() {
$('#resulty').text($(this).val());
});