Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript设置超时不工作| onkeydown_Javascript_Html_Key_Settimeout - Fatal编程技术网

Javascript设置超时不工作| onkeydown

Javascript设置超时不工作| onkeydown,javascript,html,key,settimeout,Javascript,Html,Key,Settimeout,我想做的是,当你按住w或s键时,它应该每秒调用一次函数。但现在它只会延迟第一个电话,然后每秒打12个电话。提前感谢任何愿意回答的人。我想知道更多的信息 <!DOCTYPE html> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script language="javascript" type="text/javascript"&

我想做的是,当你按住ws键时,它应该每秒调用一次函数。但现在它只会延迟第一个电话,然后每秒打12个电话。提前感谢任何愿意回答的人。我想知道更多的信息

<!DOCTYPE html>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script language="javascript" type="text/javascript">
function call(direction) {
    $.ajax({ url: '/' + direction });
}
</script>
<script>
document.onkeydown = function (event) {
    var key_press = String.fromCharCode(event.keyCode);
    var key_code = event.keyCode;
    if (key_press == "W") {
        direction = 'down';
    } else if (key_press == "S") {
        direction = 'up';
    }
    var update = setTimeout(function () {
        call(direction)
    }, 250);

}
document.onkeyup = function (event) {
    clearTimeout(update);
}
</script>

函数调用(方向){
$.ajax({url:'/'+direction});
}
document.onkeydown=函数(事件){
var key_press=String.fromCharCode(event.keyCode);
var key_code=event.keyCode;
如果(按键按==“W”){
方向=‘向下’;
}否则如果(按键=S){
方向=‘向上’;
}
var update=setTimeout(函数(){
呼叫(方向)
}, 250);
}
document.onkeyup=函数(事件){
清除超时(更新);
}

函数调用(方向){
$.ajax({url:'/'+direction});
}
变量更新,方向,键=null;
document.onkeydown=函数(事件){
var key_press=String.fromCharCode(event.keyCode);
var key_code=event.keyCode;
如果(按键按==“W”&按键!=“W”){
key=“W”;
方向=‘向下’;
update=setInterval(函数(){call(direction);},1000);
}否则,如果(按键按==“S”&&key!=“S”){
方向=‘向上’;
key=“S”;
update=setInterval(函数(){call(direction);},1000);
}
}
document.onkeyup=函数(事件){
清除间隔(更新);
}
tri这个

$(document).ready(function(){
   $(document).on('keydown',function(e){
      // content
   });
});

使用setInterval而不是setTimeout。同时考虑更新为全局变量V/P>
var update = '';
document.onkeydown = function (event) {
    var key_press = String.fromCharCode(event.keyCode);
    var key_code = event.keyCode;
    if (key_press == "W") {
        direction = 'down';
    } else if (key_press == "S") {
        direction = 'up';
    }
  if (!update) {
      update = setInterval(function () {
      call(direction)
     }, 1000);
   }     

}
document.onkeyup = function (event) {
    clearInterval(update);
    update = '';
}

这与函数的工作原理很接近,下面是我试图解决您的问题:

function debounce(callback, ms){
    var timeOutId;
    window.addEventListener('keydown', function(evt){
        var key = String.fromCharCode(evt.keyCode);
        if(['W','S'].indexOf(key) !== -1 && !timeOutId){
            timeOutId = setTimeout(function(){
                callback(evt);
                timeOutId = null;
            }, ms);
        }
    });
    window.addEventListener('keyup', function(evt){
        clearTimeout(timeOutId);        
    });
}

debounce(function(){ /* your function */}, 1000); 

演示开始。

我不知道这是什么意思。我应该把它放在哪里
function debounce(callback, ms){
    var timeOutId;
    window.addEventListener('keydown', function(evt){
        var key = String.fromCharCode(evt.keyCode);
        if(['W','S'].indexOf(key) !== -1 && !timeOutId){
            timeOutId = setTimeout(function(){
                callback(evt);
                timeOutId = null;
            }, ms);
        }
    });
    window.addEventListener('keyup', function(evt){
        clearTimeout(timeOutId);        
    });
}

debounce(function(){ /* your function */}, 1000);