hi,
i hat nach dem Durchlauf deiner Schleife den Wert 3
Davon bin ich ja eigentlich auch ausgegangen, aber Struppi hat geschrieben, dass man auf diese Weise eben dynamische Parameter auch in einer Schleife setzen kann.
Mit setAttribute(), oder eben eval() könnte man das Problem ja auf einfache Weise umgehen…
Nein, da wirfst du Dinge in einen Topf, die nichts miteinander zu tun haben.
Dein i ist eine globale Variable, und die hat nach Ablauf der Schleife den Wert 3.
Die Funktion, die du für onclick zuweist, wird erst später ausgeführt.
Sie trifft dabei auf eine Variable i, die im aktuellen Scope - dem des Objektes - nicht vorhanden ist. Also wird "weiter oben" nachgeschaut, und schliesslich im globalen Scope (window) ein i einmal gefunden - das jetzt aber dummerweise bereits den Wert 3 hat.
closures wären eine Möglichkeit, einen lokalen Gültigkeitsbereich zu erzeugen, in dem das _dortige_ i (oder auch eine Variable anderen Namens) den Wert des "aktuellen" i zugewiesen bekommt, und auch über die Laufzeit der For-Schleife hinaus behält.
Eine "ganz fiese" alternative Möglichkeit wäre noch, gar nicht eine Variable an die Funktion zu übergeben - sondern ein Textliteral, dass den _Wert_ von i enthält - der dann nach einem entsprechenden Casting zurück in einen nummerischen Wert dort wieder als solcher verwendet wird.
Dabei dürften (oder sollten) sich aber jedem, der sich ein bssichen mit sauberer Scripterstellung unter Javascript beschäftigt hat, die Fussnägel hochrollen :-)
gruß,
wahsaga
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }