JQuery和setTimeout()不起作用

时间:2012-05-06 00:59:23

标签: javascript jquery html settimeout keydown

我正在使用JQuery来监控HTML游戏的按键操作,但每当我将jquery代码添加到我的游戏循环中时,我都会收到关于keydown未定义的错误。

<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>

此代码出现错误,指出keydown未定义。我什么时候尝试过这段代码:

    setInterval(function(){
        if(keydown.left) alert("Working");
    }, 1000/50);

工作正常!!!我究竟做错了什么???我的完整代码在GitHub上here

我使用的是jQuery 1.4.4版。我使用了https://raw.github.com/figitaki/PuzzleMan/master/key_status.js提供的热键插件。这是我用来绑定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;
  });
});

更新:

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

2 个答案:

答案 0 :(得分:1)

尝试gLoop = setTimeout("GameLoop();", 1000/50);

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

Javascript代码应该按顺序加载,但是将代码包装在$(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);
        }
  });

答案 1 :(得分:0)

你定义了KeyDown吗?这是一篇关于你的按键的相关文章。

Binding arrow keys in JS/jQuery