Addeventlistener Pass Caller As Argument
Solution 1:
i
in the function(){handleRowClick(i);}
is the loop variable i
. When the function gets called, the loop is long-finished and i
holds the last value it did at the end of the loop, not the value it held when you created the function(){}
.
This is the closure loop problem. See this question for solutions using either closures or Function#bind
:
row.addEventListener('click', handleRowClick.bind(window, i), false);
However, you're not really using that i
at the moment. It would be easier to say:
row.addEventListener('click', handleRowClick, false);
and then use this
to retrieve the row:
functionhandleRowClick(){
window.open(this.cells[1].innerHTML);
}
(Side note: unfortunately if you add attachEvent
backup in order to support IE<=8, it doesn't get this
right, so you'd still be looking at closures/bind to get the object you want.)
also:
for(i =0; i<dataStructure.length; i++){
Missing var
: i
is an accidental global.
row.setAttribute('id', i);
Avoid getAttribute
/setAttribute
in HTML documents. They don't do what they should in IE. Use the DOM Level 2 HTML properties instead, they're more reliable and more readable: row.id= i
.
Post a Comment for "Addeventlistener Pass Caller As Argument"