如何在jQuery中禁用重复的keydown

时间:2012-02-01 15:53:50

标签: javascript jquery keydown

当用户按下某个键时,我希望keydown()事件只被调用一次,但是直到用户停止按下该键才会被调用。

以下是我要做的事情:

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

因此,当用户按下右箭头键时,我希望div#框向右移动30px。它会移动,但如果用户按下按键,它就会飞走。

我需要它按每次按下30px移动,并停止,即使用户按下按键。你知道怎么做吗?

2 个答案:

答案 0 :(得分:17)

跟踪哪些键已关闭,并忽略键码39,直到键盘清除它为止:

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

答案 1 :(得分:2)

保留一个标记并在keydown后将其设为绿色,我建议keyup

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