JavaScript密钥代码

JavaScript Key Codes

本文关键字:代码 密钥 JavaScript      更新时间:2023-09-26

我正在使用一个我没有编写的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;
}

这似乎适用于字母数字字符。但是,./等字符会导致此函数返回false,即使这些字符包含在chars参数中也是如此。例如,如果按下.键,则key将设置为190,keychar将设置为"3/4"字符。

有人能看到这是如何运作的吗?和/或为什么没有?我对JavaScript的了解还不够,看不出它在做什么。

有两个错误:首先,如果您正在分析已键入的字符,则需要使用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;
    }
};

我也不是JS的人,但是。。。我可以解释它应该如何工作;然而,我不知道你为什么会得到你提到的钥匙的价值。

keychar = String.fromCharCode(key);

这将检查密钥是否为可打印字符(字母、标点符号等)

if ((key == null) || (key == 0) || (key == 8) ||
    (key == 9) || (key == 13) || (key == 27))
    // Control key

以上检查键是否为空或(||)`0或8(退格)或9(制表符)或13(0x0D,或ENTER)或27(0x1B或ESCAPE)-这正是您期望的布尔结果:if<这种情况>或者<该条件>或者<另一个条件>或

else if (((chars).indexOf(keychar) > -1))

这将检查keychar是否在作为chars参数传递的字符串中