JavaScript按键代码

| 我正在使用我未编写的JavaScript例程。从文本框的“ 0”属性中调用该属性,以防止不必要的击键。 第一个参数显然未使用。第二个参数是应允许的字符列表。
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;
}
这似乎适用于字母数字字符。但是,即使
chars
参数中包含这些字符,诸如
.
/
之类的字符也会使此函数返回
false
。例如,如果按
.
键,则
key
设置为190,而
keychar
设置为\“ 3/4 \”字符。 谁能看到它是如何工作的和/或为什么不起作用?我对JavaScript知之甚少,无法了解它的作用。     
已邀请:
        这有两件事是错误的:首先,如果您要分析键入了什么字符,则需要使用
keypress
事件而不是
keydown
,因为这是唯一告诉您有关实际键入字符的可靠信息的事件。有关(通常)有关此事件和JavaScript键事件的更多信息,请参见http://unixpapa.com/js/key.html。其次,有一个名为
e
的变量的引用,该变量不(但应)与(12ѭ参数相对应。 假设您有一个名为
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
上面检查键是否为空OR(
||
)`0或8(退格键)或9(制表符)或13(0x0D或ENTER)或27(0x1B或ESCAPE)-正是布尔结果您期望:如果或...
else if (((chars).indexOf(keychar) > -1))
这将检查
keychar
是否在作为
chars
参数传递的字符串中     

要回复问题请先登录注册