0

我正在努力寻找一种在 keydown 事件后添加短暂 200 毫秒延迟的方法。

这是为了防止有人一个接一个地按得太快。

这是当前的代码:

$(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; } 
});
4

2 回答 2

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

每次按下一个键,都会检查自上次成功按下以来的时间,如果有足够的延迟,则记录当前时间并继续。否则,辍学。

有道理?

于 2012-12-08T04:19:03.797 回答
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);
});

使用一个简单的超时,在按下一个键时清除,这样如果用户每 200 毫秒键入一个键,该函数就不会执行。

于 2012-12-08T04:21:46.587 回答