You are having a very common closure problem in the for
loop.
Variables enclosed in a closure share the same single environment, so by the time the onclick
callback is executed, the loop has run its course and the i
variable will be left pointing to the last entry.
You can solve this with even more closures, using a function factory:
function makeOnClickCallback(i) {
return function() {
alert(i);
return false;
};
}
var i;
for (i = 0; i < 2; i++) {
buttons[i].onclick = makeOnClickCallback(i);
}
This can be quite a tricky topic, if you are not familiar with how closures work. You may to check out the following Mozilla article for a brief introduction:
Note: I would also suggest not to use var
inside the for
loop, because this may trick you in believing that the i
variable has block scope, when on the other hand the i
variable is just like the buttons
variable, scoped within the function.