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 every second.
The relevant code is in two files.
index.html
<html><head>
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript' src='myCode.js'></script>
</head>
<body>
<div id='board'>Text</div>
</body>
</html>
and myCode.js
(function(){
$(document).ready(function() {update();});
function update() {
$("#board").append(".");
setTimeout('update()', 1000); }
})();
the myCode.js file works alright and “update()” runs the first time through but never again.
You’ve got a couple of issues here.
Firstly, you’re defining your code within an anonymous function. This construct:
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 thatupdate()is not within scope when executed like that. It however if you pass in a function pointer instead so this works:because the function pointer
updateis within scope of that block.But like I said, there is no need for the anonymous function so you can rewrite it like this:
or
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 callingsetTimeout()withinupdate()you can just usesetInterval()instead:Hope that clears that up.