jQuery:如何过滤掉keypress事件中的非字符键?

时间:2010-02-17 22:20:17

标签: javascript jquery keypress

我尝试搜索但不确定要查找的字词。

我正在使用jQuery并且想在文本框中使用keypress事件,但是阻止所有不可打印的字符(即 Enter ESC ,箭头键, backspace tab ctrl insert F1 - F12 等)来自触发事件。

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

5 个答案:

答案 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));
    }
});

http://jsfiddle.net/4jx7v/

注意:如果使用某些浏览器(例如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));
    }
});

http://jsfiddle.net/hY5f4/

在这种情况下,仅在按下 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