最近我在我的 Windows 机器上遇到了这个问题,如果我按住任意键,按键事件的序列就会key up
重复key down
出现。
在此重点测试网站,如果我按住 TAB 键,我会得到:
keyup keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keyup keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keyup keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keyup keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keyup keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keyup keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keyup keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keyup keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keyup keyCode=9 which=9 charCode=0
我非常确定我不应该看到多个key up
事件。理想情况下,我应该看到多个key down
事件,最后看到一个key up
事件。
我尝试过更换键盘,但没用。我的所有 Windows 键盘设置似乎都正常(没有设置粘滞键/筛选键)。
我不知道如何找到这个问题的根本原因。
任何帮助将不胜感激。
谢谢。
答案1
您的问题不是 Windows 的问题,而是您的 Web 浏览器实现键盘处理方式的结果。
例如,在 Internet Explorer 中我们得到:
keydown keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keyup keyCode=9 which=9 charCode=0
而在 Firefox 中,我们得到这样的结果:
keydown keyCode=9 which=9 charCode=0
keypress keyCode=9 which=0 charCode=0
keydown keyCode=9 which=9 charCode=0
keypress keyCode=9 which=0 charCode=0
keydown keyCode=9 which=9 charCode=0
keypress keyCode=9 which=0 charCode=0
keyup keyCode=9 which=9 charCode=0
你可能会发现此引用很有用。特别是,看看3.2. 角色事件返回的经典值。唯一的问题是这个参考资料似乎非常过时。但关键原则就在那里。不同的浏览器做事方式不同:
当为特殊键生成按键事件时,浏览器需要返回一些非 ASCII 值来指示按下了哪些键。我们将看到不同的浏览器以不同的方式执行此操作。
编辑:更新的参考。