带有多个密钥的Javascript“keydown”无法正常工作

时间:2015-10-11 12:35:58

标签: javascript keyboard-events keydown keyup

我正在制作一个键盘映射器(它基本上允许我们检查同时按下的多个键),但我遇到了一个问题。

问题是它不会检测到所有按下的键。例如:we pressed 10 keys but the code says that only 7 keys are being pressed,例如we pressed 6 keys but the code says that only 4 keys are being pressed,是的,它是随机的......

那么解决方案是什么?

注意:

  1. 我已经尝试了addEventListener和其他方法
  2. 我已经尝试过其他人制作的键盘映射器,但他们都有同样的问题(至少是我遇到的问题)
  3. 我对其他方法(除此之外的方法)开放
  4. 我是新手,所以...是的:p
  5. 谢谢!

    以下是代码:

    var obj = {};
    $(document).ready(function() {
      
      document.addEventListener("keydown", function(event) {
        obj[event.keyCode] = true;
        $("#output").text("" + JSON.stringify(obj));
      });
      
      $(document).keyup(function() {   
        obj[event.keyCode] = false;
        $("#output").text("" + JSON.stringify(obj));   
      });
    
    });
    <!DOCTYPE HTML>
    <html>
    
    <head>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <link href="style.css" rel="stylesheet" type="text/css">
    </head>
    
    <body>
      <p>"PRESS ANY KEY"</p>
      <p>KeyDown:
        <p id="output"></p>
      </p>
      <br/>
    </body>
    
    </html>

1 个答案:

答案 0 :(得分:0)

问题不在于JavaScript,而在于键盘本身。它被称为键盘重影,有great article from Microsoft itself解释它。

  

&#34;重影&#34;问题是当同时按下多个键时某些键盘键不起作用。据说那些没有出现在计算机上或者似乎已经消失的关键按键已经被重复了#34;。在大多数键盘上,甚至一些明确销售为&#34; Anti-Ghosting,&#34;这有三个关键组合。想象一下,玩你最喜欢的视频游戏而不能说,对角线运行并同时发射你的武器(比如同时按a,w和g)。这是大多数现有键盘的内部设计的结果,如下所述。

您的代码是正确的,可以使用支持多重键盘。