Timo "God's Boss" Reitz: JavaScript Functionsreferenz bei onclick funktioniert nicht

Beitrag lesen

for (var i = 0; i < 3; i++)
               a.onclick = function () { showbox(i); };
Das Problem ist, dass die Variable i und nicht deren aktueller Wert in den Eventhandler-Code eingebaut wird. Die Auswertung des Codes im Eventhandler findet erst beim Aufrufen statt. i ist somit immer 3, so wie es am Ende der for-Schleife hinterlassen wurde. Allerdings fällt mir leider kein eleganterer Weg außer eval() ein, um das Problem zu lösen.

Als ich vor etwas Ähnlichem stand, habe ich das so ähnlich gelöst:

for (var i=0; i<3; i++){  
  a.onclick=(function(x){return function(){showbox(x);};})(i);}

Keine Verwendung von eval und die Closures, die einem hier den Streich spielen, werden sinnvoll eingesetzt. ;-)

--
Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|