在之前的 JavaScript 代码中,经常通过 keyCode 这个 keydown 事件中的属性,来判断当前用户按下的键是哪一个。然而,这个属性已经被废弃,不再被建议使用了(见 MDN)。取而代之的,是使用 key 或者 code 这类属性来进行类似的判断。
如果原先有如下的代码来判断用户是否按下了回车(Enter)键:
dom.addEventListener('keydown', (event) => {
if (event.keyCode === 13 /* enter */) {
// do something
}
});那么,现在使用 key 属性,可以将代码改写为:
dom.addEventListener('keydown', (event) => {
if (!event.isComposing && event.key === 'enter') {
// do something
}
});几点说明:
key属性表示当前用户按下的键是哪一个,因此可以通过'Enter'来判断按下的是否是回车键,更多介绍可以参考 MDN;- 在用
keyCode的时候,不是所有按回车的情况都会得到13:如果当前正在进行输入法的输入(composing),那么按回车得到的值是229。这里,229专门用来表示当前的按键操作由 IME(输入法)处理,等价于事件中的isComposing属性。相关的介绍可以参考 MDN;
注:这也是从 keyCode 转换到 key 属性使用时,非常容易遇到的问题。在使用 keyCode 的时候,由于输入法输入时的 keyCode 是 229 而不是 13,因此并不会走到 if (keyCode === 13) 的逻辑里面去;但是 key 的属性会忠实于用户的输入,无论是否是输入法状态都会返回 'Enter',如果有需求在输入法状态下按回车不响应事件,就需要额外判断一下。
isComposing属性可以用于判断当前是否正在进行输入法输入,也就是在compositionstart与compositionend事件的中间状态,见 MDN。注:isComposing这个属性 IE 并不支持,可以通过compositionstart和compositionend来手动获得该状态。