我正在努力寻找一种在keydown事件后添加短200 ms延迟的方法。
这是为了防止有人一个接一个地按键过快。
以下是目前的代码:
$(document).keydown(function (e) {
if ($(e.target).is('input')) { e.stopPropogation(); }
else if (e.keyCode == 37) { $(".pageback").click(); return false; }
if (e.keyCode == 39) { $(".pagenext").click(); return false; }
});
答案 0 :(得分:2)
您无法阻止某人过快按键,并且可能不明智/无法阻止该消息传来。但是,您可以跟踪自上次按键以来的时间,如果时间过早则忽略该消息:
var last_time = null;
$(document).keydown( function (e) {
var now = new Date().getTime(),
diff;
if ($(e.target).is('input')) {
e.stopPropogation();
} else if (e.keyCode == 37 || e.keyCode == 39) {
if( last_time != null ) {
diff = now - last_time;
if( diff < 200 ) {
return false; // do nothing
}
}
last_time = now;
if (e.keyCode == 39) {
$(".pageback").click();
return false;
} if (e.keyCode == 39) {
$(".pagenext").click();
return false;
}
}
});
每按一次键,检查自上次成功按下的时间,如果有足够的延迟,则记录当前时间并继续。否则,退学。
有意义吗?
答案 1 :(得分:0)
var timer;
$(document).on('keydown', function (e) {
clearTimeout(timer);
timer = setTimeout(function() {
if ($(e.target).is('input')) {
e.stopPropogation();
}else if (e.keyCode == 37) {
e.preventDefault();
$(".pageback").click();
}
if (e.keyCode == 39) {
e.preventDefault();
$(".pagenext").click();
}
}, 200);
});
使用按下键时清除的简单超时,如果用户每200ms输入的速度超过一个键,则该功能将无法执行。