Windows 中的按键行为问题

Windows 中的按键行为问题

最近我在我的 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 值来指示按下了哪些键。我们将看到不同的浏览器以不同的方式执行此操作。

编辑:更新的参考

相关内容