Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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 JQuery和setTimeout()不工作_Javascript_Jquery_Html_Settimeout_Keydown - Fatal编程技术网

Javascript JQuery和setTimeout()不工作

Javascript JQuery和setTimeout()不工作,javascript,jquery,html,settimeout,keydown,Javascript,Jquery,Html,Settimeout,Keydown,我使用JQuery来监控HTML游戏的按键操作,但是每当我将JQuery代码添加到gameloop中时,我就会得到一个关于未定义按键的错误 <html> <head> //...Included JS files JQuery, and a JQuery plugin to bind keydown // to a variable and to translate all the keypresses into

我使用JQuery来监控HTML游戏的按键操作,但是每当我将JQuery代码添加到gameloop中时,我就会得到一个关于未定义按键的错误

<html>
    <head>
        //...Included JS files JQuery, and a JQuery plugin to bind keydown
        //   to a variable and to translate all the keypresses into
        //   names so that we can monitor keypress by keydown.left...
    </head>
    <body>
        <script type="text/javascript">
            var gLoop;
            //...code excluded for brevity...
            var GameLoop = function() {
                //...code excluded...
                if(keydown.left) {
                    //do stuff
                }
                gLoop = setTimeout(GameLoop, 1000/50);
            }
        </script>
    </body>
</html>
它很好用!!!我做错了什么???我的完整代码在GitHub上

我使用了jQuery版本1.4.4。我使用了热键插件,该插件位于,下面是我用于绑定keydown的代码:

$(function() {
  window.keydown = {};

  function keyName(event) {
    return jQuery.hotkeys.specialKeys[event.which] ||
      String.fromCharCode(event.which).toLowerCase();
  }

  $(document).bind("keydown", function(event) {
    keydown[keyName(event)] = true;
  });

  $(document).bind("keyup", function(event) {
    keydown[keyName(event)] = false;
  });
});

更新:


运行代码时不再出现错误,但按左键时没有任何响应。

是否定义了KeyDown?这里有一篇与你的键盘相关的文章


试试
gLoop=setTimeout(“GameLoop();”,1000/50)

我无法按照您定义的
setTimeout
的方式调用您的函数

Javascript代码应按顺序加载,但应将代码包装在
$(文档)中。ready
将确保在加载外部文件后第一次启动它

  $(document).ready(function(){
        var gLoop;
        //...code excluded for brevity...
        var GameLoop = function() {
            //...code excluded...
            if(keydown.left) {
                //do stuff
            }
            gLoop = setTimeout("GameLoop();", 1000/50);
        }
  });

是否在初始化window.keydown之前调用函数GameLoop?否,我在文档开头包含的外部文件中初始化了它。在这种情况下,您是否尝试过将内联Javascript包装到window.onload函数中,以便确保已加载外部文件?keydown是在哪里定义的?其中是jQuery代码。您没有显示足够的信息。我添加了请求的信息,但我不认为这是问题所在,当我使用setInterval()时,它工作得很好。是的,我知道我这样做了,因为当我刚刚剪切所有额外代码并使用setTimeout(function(){if(keydown.left)alert(“Working”);},1000/50);它工作得很好,我以前从未犯过错误。如果我从GameLoop函数中取出If(keydown.left)语句,整个脚本运行得非常完美。您是否尝试过
$(document.ready()
?只是为了确保这不是问题。仍然返回
keydown
未定义错误?然后我将深入研究代码。始终将代码包装在
$(document).ready()
中,以防止在页面完全加载之前执行。它经常做那种魔术实际上,更像是防止随机虫子而不是魔术,但是是的。
  $(document).ready(function(){
        var gLoop;
        //...code excluded for brevity...
        var GameLoop = function() {
            //...code excluded...
            if(keydown.left) {
                //do stuff
            }
            gLoop = setTimeout("GameLoop();", 1000/50);
        }
  });