jQuery:如何滤除按键事件上的非字符键?

我尝试search,但不确定要查找的条款。

我正在使用jQuery,并希望在文本框中使用按键事件,但防止触发所有非打印字符(即EnterESC ,箭头键, 退格选项卡Ctrl插入F1F12等)事件。

有一个简单的方法来确定它是否可打印?

: https : //stackoverflow.com/a/20206238/253704

这个问题的select答案是不完整的。 它不处理字符键与修改键(例如CTRLA )组合的情况。

尝试,例如,使用下面的代码使用Firefox键入CTRLA。 目前的答案会认为它是一个字符:

HTML:

<input placeholder="Try typing CTRL-A in Firefox" style="width: 200px"/> 

JavaScript的:

 $("input").keypress(function (e) { if (e.which !== 0) { alert(String.fromCharCode(e.which)); } }); 

http://jsfiddle.net/4jx7v/

注意:如果使用某些浏览器(如Chrome),则不会触发警报,因为它们不会触发非字符input的按键事件。

更好的解决scheme可能是:

HTML:

 <input placeholder="Try typing CTRL-A in Firefox" style="width: 200px"/> 

JavaScript的:

 $("input").keypress(function (e) { if (e.which !== 0 && !e.ctrlKey && !e.metaKey && !e.altKey ) { alert(String.fromCharCode(e.which)); } }); 

http://jsfiddle.net/hY5f4/

在这种情况下,警报仅在按下A时触发,而不是在所有浏览器中都按下CTRLA

 <script> $("input").keypress(function (e) { if (e.which !== 0 && !e.ctrlKey && !e.metaKey && !e.altKey) { alert(String.fromCharCode(e.which)); } }); </script> 

似乎用jQuery 1.4.2,FF,IE浏览器,Chrome浏览器工作得很好。

深入了解JS键盘事件处理的混乱,请参阅: JavaScript疯狂:键盘事件


根据丹尼尔的评论更新为过滤Ctrl,元和Alt键组合。

检查组合键并不是所有情况下的最佳解决scheme。 例如,如果您使用组合键input一个字符,那么将会阻止onkeypress事件,当它不应该。

尝试在这里,你会看到,它不会工作: http : //jsfiddle.net/4jx7v/

(在Mac上,尝试Alt +一个字母,在Windows上,尝试Alt +一系列数字键。)

另一种方法是简单地检查input值是否与前一个值相比发生了变化,这样就可以肯定地知道键入的内容。

JavaScript的:

 var previousValue; $("input").keypress(function (e) { if (previousValue != $(this).val()) { alert('Something has been typed.'); } }); 

你可以使用像这样的正则expression式

 $('something').keypress(function(e) { if(e.match(YourRegularExpressionHere)) { //do something } }); 

这只会做一些事情,如果它匹配的正则expression式。

看看正则expression式。 http://www.regular-expressions.info/javascript.html