问题描述
我的应用程序正在使用的库中有代码,这对我来说是破坏性的。该库使用 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