如果用户按住该键,则会触发多个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来检测事件是否正在重复。然后,您可以等待“键入”,然后再允许处理程序再次执行。

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;
});

09-26 19:19