一些"和弦"不能使用onkeydown(JavaScript)

时间:2017-12-27 14:17:09

标签: javascript keycode

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

1)按下" e"键(它将记录"键69")

2)在按住" e"时,按"]" (它将记录"键221和#34;)

3)同时仍然按下" e"和"]",按"我" (这无法记录!)

然而,如果你放弃了我的话,那就是"并按" o"相反,它将成功记录键79和#34;。

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

任何人都可以解释这里发生了什么,以及是否有任何解决方法?  对于上下文,我正在开发一个基于QWERTY的音乐应用程序,我希望能够演奏我的所有和弦。

我知道keyCode已被弃用,或许这种行为是其中一个原因?

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

在这里演示:https://jsfiddle.net/nt0ad2ap/

2 个答案:

答案 0 :(得分:2)

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

更新

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

答案 1 :(得分:0)

221是] 的keyCode,79是 o 的keyCode,所以它并不是说你得到代表两个组合的代码或者一次按下更多按键。所以:

  1. 按&#34; e&#34;密钥(它将记录&#34;密钥69&#34;) - 确定
  2. 按住&#34; e&#34;,按&#34;]&#34; (它将记录&#34;键221和#34;) - 您获取最后一次按下的代码(221)]
  3. ,同时仍然按下&#34; e&#34;和&#34;]&#34;,按&#34;我&#34; (这没有 log!) - 我无法重现这个场景,我得到代码73,这是 i 的代码
  4. 但是,如果你放弃了&#34;我&#34;并按&#34; o&#34;相反,它会 成功登录&#34;键79&#34;。 - 您正在获取最后一次按下的密码 o
  5. 如果您需要在JavaScript中组合键,那么您应该考虑altKeyctrlKeyshiftKeymetaKey

    Here's您可能觉得有用的旧例子。 希望它有所帮助。