I was having the most unusual problem in a function that used a for loop to find selected items in a html select list. My iterator variable “i” was for some reasen ending up with a value higher than the for loop would allow.
As it turns out, if you declare a variable without using the “var” keyword, that variable has global scope.
Case in point:
function pressRemove() { fromBox = selBox; toBox = allBox; for (i=fromBox.length-1;i>=0;i--) { if (fromBox.options[i].selected) { addOpt(toBox,fromBox.options[i].value,fromBox.options[i].text,2); fromBox.remove(i); } } }
The function addOpt includes it’s own for loop, also using a variable named i. That inner for loop was overwriting the value in this for loop!
... for (var i=fromBox.length-1;i>=0;i--) { ...
By changing all the for loops to declare their variables, the problem was solved. Personally, I think that is a really stupid “feature”, but since both IE and Firefox do it, it is expected.