2012-04-13 172 views
0

我正在jQuery中进行表单验证,当用户输入一个禁止的字符(如#$ @%)时会发出警告。问题是,当用户输入这些字符时,他使用SHIFT键,所以有两个键盘。如何在jQuery中阻止keyup()事件?

如何防止第二次发生?

if (!regex.test(lastCharacter) 
    alert('forbidden character'); 

非常感谢

回答

1

您可以在输入时改变发射输入绑定事件,不过这只是自IE9以来才支持的。在此之前,您可以绑定propertychange事件(仅在IE中),当输入值发生更改时发生。下面的例子可以在大多数浏览器中使用,也可能在IE9中触发两次回调,因此可能需要检查输入事件支持并相应地采取相应措施。

http://jsfiddle.net/X4qNf/

这里我不好是一个与PropertyChangeListener中的它,尝试在IE浏览器,如果它不工作,你可能需要指定它的老路上。

$('#boo')[0].onpropertychange = function() {}; 

http://jsfiddle.net/X4qNf/2/

+0

您好感谢您的答复。我用safari和firefox尝试了你的解决方案。 onpropertychange也会与IE一起工作吗?非常感谢 – eric01 2012-04-13 23:07:27

+0

我没有测试过这个盒子上没有IE,而是从http://help.dottoro.com/larrqqck.php声称它应该工作(并且它从未测试过你的特殊情况) – GillesC 2012-04-13 23:09:13

+0

textInput event似乎一个更好的候选人实际上特定于字符输入(从IE9再次) – GillesC 2012-04-13 23:10:11

1

我不知道这是否会工作,但你的想法:

$("#myInput").keyup(function(e) { 
    if(e.which == 16) { 
     $(this).keyup(function(event) { 
      if(event.which==16) event.preventDefault(); 
     }); 

     setTimeout(function() { 
      $("#myInput").off('keyup'); 
     },1000); 
    } 
});​