我尝试搜索但不确定要查找的字词。
我正在使用jQuery并且想在文本框中使用keypress事件,但是阻止所有不可打印的字符(即 Enter , ESC ,箭头键, backspace , tab , ctrl , insert , F1 - F12 等)来自触发事件。
是否有一种简单的方法可以确定它是否可打印?
答案 0 :(得分:28)
<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 Madness: Keyboard Events
更新以过滤ctrl,meta&amp;根据{{3}}的alt键组合。
答案 1 :(得分:27)
此问题的选定答案尚未完成。它不处理与修饰键组合使用字符键的情况(例如 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),则不会触发警报,因为它们不会针对非字符输入触发按键事件。
更好的解决方案可能是:
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 。
答案 2 :(得分:0)
在所有情况下,检查组合键不是最佳解决方案。
例如,如果您使用键组合键入字符,则会阻止onkeypress
事件,当它不应该时。
在此尝试,您会发现它不起作用:http://jsfiddle.net/4jx7v/
(在Mac上,尝试使用alt +一个字母,在Windows上,尝试使用alt +一系列数字键。)
另一种方法是简单地检查输入值是否与前一个输入值有所不同,这样就可以确定输入了什么内容。
JavaScript的:
var previousValue;
$("input").keypress(function (e) {
if (previousValue != $(this).val()) {
alert('Something has been typed.');
}
});
答案 3 :(得分:0)
如果您只想在字段的输入实际发生更改时执行某些操作,则应使用input
事件而不是keypress
事件。如果您现在想支持IE <9,则还需要它的专有propertychange
事件。
在jQuery中,您可以像这样使用它:
$('input').on('propertychange input', function (e) {
// will fire directly but only when input changes
});
答案 4 :(得分:-4)
您可以使用像这样的正则表达式
$('something').keypress(function(e) {
if(e.match(YourRegularExpressionHere)) {
//do something
}
});
只有与正则表达式匹配时才会执行此操作。
看看正则表达式。 http://www.regular-expressions.info/javascript.html