键盘事件:Keyup给出不一致的行为

时间:2018-12-12 22:36:19

标签: javascript

我在使用Javascript(在chrome中选中)上的键盘按键事件方面遇到了问题。

以下4个部分分为四个不同文件,请附加在一起。它工作正常,但有一种奇怪的行为。

查看代码,然后关注标记的行

MAIN.JS

document.addEventListener("DOMContentLoaded", function() {
    document.onkeyup = function(event){
        EVENT_KEYBOARD(event);
    }
}

事件:

function EVENT_KEYBOARD(event) {
    LOG_DEBUG("key pressed." + event.key + " code"+event.keyCode);
    main_controller.event_keyboard_click(event);
}

控制器:

this.event_keyboard_click = function(event) {
    keyCode = event.keyCode;
    key = event.key;
    if(keyCode == 44){ myCanvas.abond_for_a_while(3000);}// PRINT SCREEN
    else if(keyCode == 27){ myConsolas.cursorEscape();} // ESCAPE
    ...
    else if(key == "Delete"){myConsolas.cursorDelete();}
    else {myConsolas.workForMe(event);}
}

CONSOLAS.JS:

this.workForMe = function(event) {
    key=event.key.toUpperCase();
// THIS LINE BELOW:
    if((key.length==1&&key>='0'&&key<='Z') || ",*-_ ;\'".includes(event.key)){
        ...
    }
}

现在让我们考虑四个字符,这些字符在我的(物理)键盘上的两个按钮上都被打褶了:

  • 键1:按住Shift键时为“ 0”或“)”
  • 键2:“;”或在按住Shift键的同时按下“:”

当我按下 0 时-LOG_DEBUG打印:  -键已按下。0code48  -按键。)code48

,当我按; 时,LOG_DEBUG将打印:  -按下键。代码186  -键被按下。:code186

最后:条件

if((key.length==1&&key>='0'&&key<='Z') || ",*-_ ;\'".includes(event.key))

是TRUE: 0 但是为FALSE-为什么?为什么?为什么?

1 个答案:

答案 0 :(得分:1)

它为)返回false,因为您要比较的范围不包含该字符,并且您也不会在其他字符列表中检查它(其中还包括一些多余的字符)。您的下限为'0',即48,上限为Z,即90。该范围包括以下字符:0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ

)的字符代码为41

let chars = ''
let start = '0'.charCodeAt(0)
let end = 'Z'.charCodeAt(0)
console.log(`Starting at: ${start}`)
console.log(`Ending at: ${end}`)
for (let i = start; i <= end; i++)
{
  chars += String.fromCharCode(i)
}
console.log(chars)
console.log(`Value of ')': ${')'.charCodeAt(0)}`)