1

当我得到按键的按键代码时,我将按键代码输出到控制台。我记录了两个键码:keydown 和 keypress。

当我按F5时,我得到以下键码:

keydown = 84 ("T")
keypress = 116 ("t")

当我按t时,我得到以下键码:

keydown = 116 ("t")
keypress = 116 ("t")

这只发生在 Firefox 中。当按下的原始键不一样时,为什么 keypress 键码相同,并且 keydown 码相似?

4

1 回答 1

2

你确定你没有混淆keyCodecharCode

使用QuirksMode底部的结果,我得到

  • F5
    • keydown:keyCode 为 116;字符代码为 0
    • keypress:keyCode 为 116;字符代码为 0
    • keydown:keyCode 为 84;字符代码为 0
    • 按键:keyCode 为 0;字符代码为 116
    • keydown:keyCode 为 84;字符代码为 0
    • 按键:keyCode 为 0;字符代码为 84

keyCode表示用户实际按下的键盘键,而charCode表示字符的代码点。例如,键tT相同keyCode,因为它们来自相同的键,而它们不同charCode,因为它们代表不同的字符。

所以要回答你的问题,你得到的F5 keydown 的输出是 84,插入时String.fromCharCode()给出“T”,而 keypress 是 116,对应于使用String.fromCharCode().

简而言之,不要使用String.fromCharCode()on keyCode,因为结果是荒谬的。只在charCode. 同样来自QuirksMode,在“特殊键”下

如果您需要检测这些键,请帮自己一个忙并在 onkeydown/up 上搜索它们的 keyCode,并忽略 onkeypress 和 charCode。

于 2013-01-01T03:36:38.343 回答