jQuery:如何滤除按键事件上的非字符键?
我尝试search,但不确定要查找的条款。
我正在使用jQuery,并希望在文本框中使用按键事件,但防止触发所有非打印字符(即Enter , ESC ,箭头键, 退格 , 选项卡 , Ctrl , 插入 , F1 – F12等)事件。
有一个简单的方法来确定它是否可打印?
答 : https : //stackoverflow.com/a/20206238/253704
这个问题的select答案是不完整的。 它不处理字符键与修改键(例如CTRL – A )组合的情况。
尝试,例如,使用下面的代码使用Firefox键入CTRL – A。 目前的答案会认为它是一个字符:
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)); } });
注意:如果使用某些浏览器(如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)); } });
在这种情况下,警报仅在按下A时触发,而不是在所有浏览器中都按下CTRL – A 。
<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