有些 "chords" 不适用于 onkeydown (JavaScript)

Some "chords" do not work with onkeydown (JavaScript)

某些键盘 "chords"(同时按下的组合键)无法在浏览器中正确注册(Chrome 和 Firefox 已测试)。例如,使用下面的代码,试试这个:

1) 按"e"键(会记录"key 69")

2) 在按住 "e" 的同时按“]”(它将记录 "key 221")

3) 在按住 "e" 和 "] 的同时,按 "i"(记录失败!)

4) 但是,如果您在 "i" 上放松并改为按 "o",它将成功记录 "key 79"。

document.onkeydown = function(event){
    var key = event.keyCode;          
    console.log("key", key);
};

谁能解释一下这是怎么回事,是否有任何解决方法? 对于上下文,我正在开发一个基于 QWERTY 的音乐应用程序,我希望能够演奏我所有的和弦。

我知道 keyCode 已被弃用,也许这种行为是原因之一?

解决这个问题的正确方法是什么?

此处演示:https://jsfiddle.net/nt0ad2ap/

我 99.9% 确定这取决于键盘的硬件本身。我尝试在连接到笔记本电脑的键盘上执行 e + ] + i 但它不起作用但是当我在那个键盘上按 e + ] 然后在笔记本电脑上按 i 然后它工作.键盘通常不会被构建为一次注册那么多键(除了 shiftctrlalt ) 因为通常不需要它。有专门为游戏而设计的特殊键盘,可以一次注册更多键。尝试使用谷歌搜索“防重影键盘”。这是关于 Quora 关于该主题的问题。我有一个键盘,假设在家里一次按下 13 个键。我会在回家后的几个小时内检查代码是否适用于该键盘。

更新:

在更好的键盘上工作正常。这是一个硬件问题。

221 是 ] 的密钥代码,79 是 o 的密钥代码,所以这并不是说您得到的代码代表同时按下两个或多个键的组合。所以:

  1. 按 "e" 键(它将记录 "key 69")- 没关系
  2. 在按住 "e" 的同时,按“]”(它将记录 "key 221")- 您将获得最后一次按下的 kew 的代码 (221) ]
  3. 同时按住 "e" 和“]”,按 "i"(这失败了 log!) - 我无法重现这种情况,我得到代码 73,它是 i
  4. 的代码
  5. 但是,如果您在 "i" 上松开并改为按 "o",它将 成功登录 "key 79"。 - 您正在获取最后一次按下的 kew 的代码 o

如果您需要在 JavaScript 中组合键,那么您应该考虑 altKey, ctrlKey, shiftKey, metaKey

Here's 一个您可能会觉得有用的旧示例。 希望对你有帮助。