for(i=0; i < 3; i++){ for(j=0; j < 3; j++){ document.getElementById(i+'_'+j).onmouseover = function() {alert(i)}; } }
Zdawałoby się, że po wykonaniu takiego kodu powinienem uzyskać taki rezultat:
<div id="0_0" onmouseover="alert(0)"> <div id="0_1" onmouseover="alert(0)"> <div id="0_2" onmouseover="alert(0)"> <div id="1_0" onmouseover="alert(1)"> <div id="1_1" onmouseover="alert(1)"> <div id="1_2" onmouseover="alert(1)"> <div id="2_0" onmouseover="alert(2)"> <div id="2_1" onmouseover="alert(2)"> <div id="2_2" onmouseover="alert(2)">
Jednak tak nie jest i w każdym elemencie mam alert(2) czyli ostatnią iteracją pętli "i"...
Wynika to pewnie z tego, że funkcja w rzeczywistości jest tworzona tylko w jednej kopii, a każdy element onmouseover odwołuje się do jej aktualnej i jedynej wersji czyli tak jakbym napisał:
Może ktoś już miał podobny problem. Czy jest jakiś sposób, żeby to ująć w pętli i uzyskać oczekiwany efekt?