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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9098901/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 05:35:32  来源:igfitidea点击:

How to disable repetitive keydown in jQuery

javascriptjquerykeydown

提问by Nazar

When user keeps a key pressed, I want the keydown() event get called only once, but its called until user stops pressing the key.

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

Here is what I am trying to do:

这是我想要做的:

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

So, when user presses right arrow key, I want the div#box to move 30px to the right. It moves but if user keeps key pressed it flies away.

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

I need it to move only by 30px per press, and stop, even if user keeps the key pressed. Do you know how it can be accomplished?

我需要它每次按下仅移动 30 像素,然后停止,即使用户一直按下键。你知道如何实现吗?

回答by Marc B

Keep track of which keys are down, and ignore keycode 39 until a keyup even clears it:

跟踪哪些键被按下,并忽略键码 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;
});

回答by Rafay

keep a flag and turn it green upon keydowni would suggest keyupthough

保持一个标志,把它绿色在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");
      }
     } 
   });