2012-02-01 7 views
12

ユーザーがキーを押したままにすると、keydown()イベントは1回だけ呼び出されますが、ユーザーがキーを押すのを止めるまで呼び出されます。ここでjQueryの反復キーダウンを無効にする方法

は私がやろうとしていますものです:

$(document).keydown(function(event){ 
    var keycode = (event.keyCode ? event.keyCode : event.which); 
    if(keycode == '39'){ 
       $("#box").animate({"left": "+=30px"}, "fast"); 
    } 
    }); 

ので、ユーザは、右矢印キーを押したときに、私は右に30pxを移動するためのdiv#ボックスをしたいです。それは動きますが、ユーザーがキーを押し続けると、飛んでいきます。

プレスごとに30pxだけ移動し、ユーザーがキーを押したままにしても停止する必要があります。どのように達成できるのかご存じですか?

+2

便宜上、 'event.keyCode? event.keyCode:event.which'は、 'event.keyCode ||と等価です。 event.which'、非ブーリアンの場合でも。 – Keen

答えて

17

はキーがダウンであるを追跡し、そしてからkeyupもそれをクリアするまでキーコード39を無視しても私はkeyupを示唆している​​時にフラグを維持し、グリーンITを回す:

var down = {}; 

$(document).keydown(function(event){ 
    var keycode = (event.keyCode ? event.keyCode : event.which); 
    if(keycode == '39'){ 
      if (down['39'] == null) { // first press 
       $("#box").animate({"left": "+=30px"}, "fast"); 
       down['39'] = true; // record that the key's down 
      } 
    } 
    }); 

$(document).keyup(function(event) { 
    var keycode = (event.keyCode ? event.keyCode : event.which); 
    down[keycode] = null; 
}); 
+0

ありがとうございました!出来た。私はこれを正解としています。 – Nazar

+1

構文エラーがあると思いますか? $(document).keyup(function(event){ var keycode =(event.keyCode?event.keyCode:event.which); down [keycode] = null; }); – Nazar

2

$(document).keydown(function(event){ 
    $flag=false; 
    var keycode = (event.keyCode ? event.keyCode : event.which); 

     if(keycode == '39'){ 
      if(!$flag){ 
       $flag=true; 
       $("#box").animate({"left": "+=30px"}, "fast"); 
     } 
    } 
    }); 
関連する問題