JQuery, setTimeout not working

前端 未结 4 482
挽巷
挽巷 2020-11-30 23:28

I\'m still new to JQuery, on the way to getting my ajax example to work i got stalled with setTimeout. I have broken it down to to where it should add \".\" to the div eve

4条回答
  •  不思量自难忘°
    2020-12-01 00:00

    You've got a couple of issues here.

    Firstly, you're defining your code within an anonymous function. This construct:

    (function() {
      ...
    )();
    

    does two things. It defines an anonymous function and calls it. There are scope reasons to do this but I'm not sure it's what you actually want.

    You're passing in a code block to setTimeout(). The problem is that update() is not within scope when executed like that. It however if you pass in a function pointer instead so this works:

    (function() {
      $(document).ready(function() {update();});
    
      function update() { 
        $("#board").append(".");
        setTimeout(update, 1000);     }
      }
    )();
    

    because the function pointer update is within scope of that block.

    But like I said, there is no need for the anonymous function so you can rewrite it like this:

    $(document).ready(function() {update();});
    
    function update() { 
      $("#board").append(".");
      setTimeout(update, 1000);     }
    }
    

    or

    $(document).ready(function() {update();});
    
    function update() { 
      $("#board").append(".");
      setTimeout('update()', 1000);     }
    }
    

    and both of these work. The second works because the update() within the code block is within scope now.

    I also prefer the $(function() { ... } shortened block form and rather than calling setTimeout() within update() you can just use setInterval() instead:

    $(function() {
      setInterval(update, 1000);
    });
    
    function update() {
      $("#board").append(".");
    }
    

    Hope that clears that up.

提交回复
热议问题