`String.fromCharCode(event.keyCode)` 行为异常

问题描述

我的应用程序正在使用的库中有代码,这对我来说是破坏性的。该库使用 String.fromCharCode(event.keyCode) 来确定是否已触发指定的键盘快捷键。无论出于何种原因,在我的机器上,非字母代码的行为都很奇怪。因此,event.key 不等于 String.fromCharCode(event.keyCode)。现在,我不知道他们为什么使用 String.fromCharCode(event.keyCode) 而不是 event.key,但我无法更改他们的代码,所以我试图理解为什么我的机器在这里生成不同的值。>

当我附加 keydown 事件侦听器时:

document.addEventListener('keydown',event => console.log(event.keyCode,event.key,String.fromCharCode(event.keyCode).toLowerCase()))

我得到这些日志:

219 – "[" – "û"
189 – "-" – "½"
187 – "=" – "»"
221 – "]" – "ý"
186 – ";" – "º"

世界到底发生了什么?

解决方法

volatile 给出了 UTF-16 代码单元,而不是关键代码。

键码与 keys on a keyboard 相关联,而不是与字符相关联:

KeyboardEvent.code 属性表示键盘上的一个物理键(与按键生成的字符相对)。换言之,此属性返回的值不会因键盘布局或修饰键的状态而改变。

要获得它,您需要处理一个实际的密钥:

return mData
charCodeAt