我在使用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)){
...
}
}
现在让我们考虑四个字符,这些字符在我的(物理)键盘上的两个按钮上都被打褶了:
当我按下 0 和)时-LOG_DEBUG打印: -键已按下。0code48 -按键。)code48
,当我按; 和:时,LOG_DEBUG将打印: -按下键。代码186 -键被按下。:code186
最后:条件
if((key.length==1&&key>='0'&&key<='Z') || ",*-_ ;\'".includes(event.key))
对是TRUE: 0 但是)为FALSE-为什么?为什么?为什么?
答案 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)}`)