如果用户按住该键,则会触发多个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;
});