我的应用程序正在使用的库中有代码,这对我来说是崩溃的。该库使用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 – ";" – "º"这个世界是怎么回事?
发布于 2021-03-05 21:27:38
charCodeAt给出了UTF-16代码单元,而不是密钥代码。
密钥代码与keys on a keyboard相关联,而不与字符相关联:
KeyboardEvent.code属性表示键盘上的一个物理键(与按下该键生成的字符相反)。换句话说,此属性返回的值不会因键盘布局或修改键的状态而改变。
要获得它,您需要处理一个实际的密钥:
document.querySelector("textarea").addEventListener('keydown', handler);
function handler(evt) {
console.log({
keyCode: evt.keyCode,
code: evt.code,
key: evt.key
});
}<textarea placeholder="Type here"></textarea>
https://stackoverflow.com/questions/66493368
复制相似问题