如何在jQuery中禁用重复的keydown [英] How to disable repetitive keydown in jQuery

查看:644
本文介绍了如何在jQuery中禁用重复的keydown的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当用户按下某个键时,我希望keydown()事件只被调用一次,但是在用户停止按键之前调用它。

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

这是什么我正在尝试:

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

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

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.

我需要它每次按下只移动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?

推荐答案

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

Keep track of which keys are down, and ignore keycode 39 until a keyup even clears 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;
});

这篇关于如何在jQuery中禁用重复的keydown的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆