0

キーダウン イベントの後に 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 ミリ秒ごとに 1 つのキーよりも速く入力している場合、関数は実行されません。

于 2012-12-08T04:21:46.587 に答える