JQuery, setTimeout not working
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.
setInterval(function() { $('#board').append('.');}, 1000);
You can use clearInterval if you wanted to stop it at one point.
SetTimeout is used to make your set of code to execute after a specified time period so for your requirements its better to use setInterval because that will call your function every time at a specified time interval.