Javascript 如何在jQuery中禁用重复按键
当用户按住某个键时,我希望只调用一次keydown()事件,但直到用户停止按键为止 以下是我试图做的: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");
$(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
,即使对于非布尔型也是如此。