jQuery: how to filter out non-character keys on keypress event?

前端 未结 5 1012
不知归路
不知归路 2020-12-08 02:39

I tried searching but unsure of what terms to look for.

I\'m using jQuery and would like to use the keypress event in a textbox, but prevent all non-printable charac

5条回答
  •  天涯浪人
    2020-12-08 03:13

    The selected answer for this question is not complete. It does not handle the case where a character key is being pressed in combination with a modifier key (e.g. CTRL-A).

    Try, for example, typing CTRL-A using firefox with the following code. The current answer will consider it as a character:

    HTML:

    
    

    JavaScript:

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

    http://jsfiddle.net/4jx7v/

    Note: an alert won't be fired if using some browsers (such as Chrome), since they don't fire a keypress event for non-character inputs.

    A better solution might be:

    HTML:

    
    

    JavaScript:

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

    http://jsfiddle.net/hY5f4/

    In this case, the alert is only being fired when A is pressed, not CTRL-A for all browsers.

提交回复
热议问题