Attaching Event In Loop
what am doing is attaching event on a class using a loop and index values are being used in the event handler code. here is my code: var classElements=document.getElementsByClassNa
Solution 1:
JavaScript closes over the object and evaluates it later when it is called. At the time it is called, i
is 4.
I think you want something like:
var classElements=document.getElementsByClassName("a");
for(var i=0; i<4; i++)
{
classElements[i].onClick=function(j) {
returnfunction(){
alert("Clicked button : "+j);
};
}(i);
}
EDIT: shown with named functions to make the code more clear
var classElements=document.getElementsByClassName("a");
for(var i=0; i<4; i++)
{
var makeFn = function(j) {
returnfunction(){
alert("Clicked button : "+j);
};
};
classElements[i].onClick = makeFn(i);
}
Solution 2:
You need a closure in order to capture the changes of i
. As Lou stated this is due to post evaluation.
var classElements=document.getElementsByClassName("a");
for(var i=0; i<4; i++)
classElements[i].onclick = (function(i){
returnfunction(){ alert("Clicked button : " + i) };
})(i);
Post a Comment for "Attaching Event In Loop"