javascript - 如何避免 JavaScript 中自动重复的按键事件?

标签 javascript jquery keyboard

如果用户按住该键,则会触发多个 keydown 事件。出于可用性原因,我需要使用 keydown,而不是 keyup,但我想避免这种情况。我的相关代码如下:

$(document).keydown(function(e) { 
        var key = 0;


        if (e == null) { key = event.keyCode;}  
        else {  key = e.which;} 


        switch(key) {
            case config.keys.left:                
              goLeft();
              break;
            case config.keys.up:                        
              goUp();
              break;
            case config.keys.right:                     
              goRight();
              break;
            case config.keys.down:                
              goDown();
              break;
            case config.keys.action:              
              select();
              break;
        }     
      });

因此,例如,当用户按住向下键时,goDown() 会被多次触发。即使用户按住按键,我也希望它只触发一次。

最佳答案

使用event.repeat来检测事件是否重复。然后,您可以等待“keyup”,然后再允许处理程序第二次执行。

var allowed = true;

$(document).keydown(function(event) { 
  if (event.repeat != undefined) {
    allowed = !event.repeat;
  }
  if (!allowed) return;
  allowed = false;
  //...
});

$(document).keyup(function(e) { 
  allowed = true;
});
$(document).focus(function(e) { 
  allowed = true;
});

关于javascript - 如何避免 JavaScript 中自动重复的按键事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7686197/

相关文章:

javascript - 如何将 this.value 作为放置在 JavaScript 事件处理程序中的函数中的参数?

javascript - 使 localStorage 中的 Backbone.js 项目独一无二?

jquery - 复杂类型的 Ajax 模型绑定(bind)

javascript - $.when.then() 执行的 jQuery 序列

jQuery fancybox - 在 iframe 中定位特定的 div #id

Android-键盘随机显示onResume

javascript - RequireJS 优化器前置

javascript - promise 不返回请求的值(value)

swift - resignFirstResponder 未按预期工作。每次按键时键盘弹出都会弹出,而不仅仅是返回

jquery - 键盘事件