JavaScript密钥代码

Jon*_*ood 2 javascript keycode fromcharcode

我正在使用我没写过的JavaScript例程.它从文本框的onkeydown属性中调用,以防止不必要的击键.

显然没有使用第一个参数.第二个参数是应该允许的字符列表.

function RestrictChars(evt, chars) {
    var key;
    var keychar;

    if (window.event)
        key = window.event.keyCode;
    else if (e)
        key = e.which;
    else
        return true;

    keychar = String.fromCharCode(key);

    if ((key == null) || (key == 0) || (key == 8) ||
        (key == 9) || (key == 13) || (key == 27))
        // Control key
        return true;
    else if (((chars).indexOf(keychar) > -1))
        return true;
    else
        return false;
}
Run Code Online (Sandbox Code Playgroud)

这似乎适用于字母数字字符.然而,字符如./导致此函数返回false,即使这些字符包含在chars参数.例如,如果.按下该键,key则设置为190,并keychar设置为"3/4"字符.

任何人都可以看到这是如何工作和/或为什么不工作?我对JavaScript的了解不足以了解它正在尝试做什么.

Tim*_*own 5

这有两个问题:第一,如果你正在分析键入的字符,你需要使用keypress事件而不是keydown因为这是唯一一个告诉你任何关于输入的实际字符可靠的事件.有关这个和JavaScript关键事件的更多详细信息,请参阅http://unixpapa.com/js/key.html.其次,有一个被称为变量的引用e,它不会(但应该)与evt参数对应.

这是一个重写,假设你有一个被称为textBox文本输入元素的变量.

jsFiddle:http://jsfiddle.net/9DZwL/

码:

function isKeypressCharValid(e, chars) {
    e = e || window.event;

    // Allow delete, tab, enter and escape keys through
    if (/^(8|9|13|27)$/.test("" + e.keyCode)) {
        return true;
    }

    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
    var charTyped = String.fromCharCode(charCode);
    return chars.indexOf(charTyped) > -1;
}

textBox.onkeypress = function(evt) {
    if (!isKeypressCharValid(evt, "abc123")) {
        return false;
    }
};
Run Code Online (Sandbox Code Playgroud)