防止JavaScript keydown事件在按下时被多次处理

Chr*_*ris 16 javascript

我有这个代码:

else if (e.keyCode == 32){
      fired = true;
Run Code Online (Sandbox Code Playgroud)

在keyDown函数中(我添加了document.addEventListener代码).现在它工作正常,并完全按照我的要求去做.但问题出在这里:如果按住键,它会一直反复地持续激活= true,直到它被释放.我只想要它设置fired = true; 一旦,即使按键被按下.

mr_*_*air 18

    var fired = false;

    element.onkeydown = function() {

        if(!fired) {
            fired = true;
            // do something
        }
    };
Run Code Online (Sandbox Code Playgroud)

然后使用onkeyup事件

    element.onkeyup = function() {
     fired = false;
    };
Run Code Online (Sandbox Code Playgroud)


Ist*_*115 11

如果您不是主要的浏览器兼容性*,则可以尝试访问的.repeat属性,如此处所述KeyboardEventhttps :
//developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/repeat

通过在处理程序函数中执行以下操作:

function keyDown (e) {
  if (e.repeat) { return }

  // do stuff here
}
Run Code Online (Sandbox Code Playgroud)

您可以避免重复按键。


*:在MDN网站上指出它可以在Firefox中运行,并且我已经在Chrome中成功使用了它,因此两个主要的浏览器都应该没有问题

  • 终于有一个干净的解决方案了! (5认同)
  • 我很高兴您喜欢它,它也来自匈牙利,所以您会感觉它是_本地采购的_。:D (4认同)

ale*_*lex 1

使用keyup事件。当钥匙被抬起时它会被触发。