我需要检测刚刚按下的键是可打印键,例如字符(可能带有重音符号),数字,空格,标点符号等,还是不可打印键,例如ENTER,TAB或DELETE。

除了列出所有不可打印的键并希望不要忘记某些键以外,是否有可靠的方法来用Javascript做到这一点?

最佳答案

我昨天回答了similar question。注意,对于与字符相关的任何事情,都必须使用keypress事件; keydown不起作用。

顺便说一句,我认为Enter是可打印的,并且此函数认为它是可打印的。如果您不同意,则可以对其进行修改,以将事件的whichkeyCode属性设置为13来过滤按键。

function isCharacterKeyPress(evt) {
    if (typeof evt.which == "undefined") {
        // This is IE, which only fires keypress events for printable keys
        return true;
    } else if (typeof evt.which == "number" && evt.which > 0) {
        // In other browsers except old versions of WebKit, evt.which is
        // only greater than zero if the keypress is a printable key.
        // We need to filter out backspace and ctrl/alt/meta key combinations
        return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which != 8;
    }
    return false;
}

var input = document.getElementById("your_input_id");
input.onkeypress = function(evt) {
    evt = evt || window.event;

    if (isCharacterKeyPress(evt)) {
        // Do your stuff here
        alert("Character!");
    }
});

09-28 00:21