Zitat von
Lookbehind
Die schleife wird übrigens sehr früh abgebrochen...
Abbruch-Bedingung: i != btns.length
Solange btns nicht leer ist, wird sie nicht einmal ausgeführt.
Du möchtest das "ungleich" vielleicht durch ein "kleiner als" ersetzen.
Der nächste, der nur gucken will, ob ich was übersehe...
Die Schleife wird ausgeführt, wenn die Bedingung wahr ist. Also ist das schon so in Ordnung. Dein Vorschlag funktioniert natürlich auch, ist aber nicht nötig.
Zitat von
Feuerstern
Hallo Leute,
ich versuche in Javascript mehreren Buttons eine Funktion zu übergeben die beim anklicken ausgeführt werden soll.
Dafür verwende ich eine anonyme Funktion die durch eine Schleife jedem Button zugeordnet werden soll.
Man versteht dich ziemlich schlecht. Ist das so gemeint?
Das Array "btns" besitzt in meinem Beispiel 3 Elemente.
In der anonymen Funktion brauche ich allerdings den index des im Array gespeicherten Buttons.
Das Problem ist nun das die Variable "index" in der Funktion immer 2 ist (da index zuletzt der Wert 2 zugeordnet wird).
Verzichte ich auf die zwischen Variable "index" und verwende sofort "i" ist sie 3 weil sie in der Schleife bis 3 hochgezählt wird.
Das Verhalten ist korrekt, wie du es beschreibst, wenn die Funktion außerhalb der Schleife aufgerufen wird. Innerhalb der Schleife erhält sie zwar ihren Kontext, aber die Werte sind diejenigen zum Zeitpunkt des Aufrufs. So, wie du es schilderst, ist die Schleife dann schon durchgelaufen, was eben zu den beobachteten Werten führt.
Wie komme ich in der annonymen Funktion an den Wert von "i" den die Variable zum Zeitpunkt der Zuweisung der anonymen Funktion besitzt?
So einfach gar nicht, weil nicht die Funktion zugewiesen wird, sondern ein Verweis auf diese. Du rufst sie vermutlich irgendwo auf (fehlt hier Edit: Nein, es fehlt nicht, denn ich hatte den "onclick Event" nicht identifiziert), wobei der aktuelle Kontext gilt. Das ist innerhalb der Schleife der ihres letzten Durchlaufs, wenn die Werte nicht anderweitig geändert worden sind.
Edit: Inzwischen sehe ich auch, dass dir das längst klar gewesen ist.
Falls ich Blödsinn geschrieben habe, bitte korrigieren. Mache normalerweise nichts mit JavaScript.
Edit: Da haben wir es schon: Vergiss, was ich über die passende Abstraktion geschrieben hatte, mit Closures geht es nicht nur, sondern die Abstraktion stimmt auch.