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
How to disable repetitive keydown in jQuery
提问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 keydown
i would suggest keyup
though
保持一个标志,把它绿色在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");
}
}
});