Javascript 如何在jQuery中禁用重复按键

Javascript 如何在jQuery中禁用重复按键,javascript,jquery,keydown,Javascript,Jquery,Keydown,当用户按住某个键时,我希望只调用一次keydown()事件,但直到用户停止按键为止 以下是我试图做的: $(document).keydown(function(event){ var keycode = (event.keyCode ? event.keyCode : event.which); if(keycode == '39'){ $("#box").animate({"left": "+=30px"}, "fast");

当用户按住某个键时,我希望只调用一次keydown()事件,但直到用户停止按键为止

以下是我试图做的:

   $(document).keydown(function(event){
     var keycode = (event.keyCode ? event.keyCode : event.which);
     if(keycode == '39'){
              $("#box").animate({"left": "+=30px"}, "fast");
     } 
   });  
所以,当用户按下向右箭头键时,我希望div#框向右移动30px。它会移动,但若用户一直按下该键,它就会飞走


我需要它移动每按30像素,并停止,即使用户保持按键按下。你知道如何实现吗?

保留一个标志,并在按下
keydown
键时将其变为绿色,但我建议按下
keydup

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

跟踪哪些键处于按下状态,忽略键代码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;
});

谢谢你的方法!成功了。我将此标记为正确答案。我相信您有语法错误$keyup(函数(事件){var keycode=(event.keycode?event.keycode:event.which);down[keycode]=null;});请注意,
event.keyCode?event.keyCode:event.which
相当于
event.keyCode | | event.which
,即使对于非布尔型也是如此。