Zähler-Wert in for-Schleife an anonyme Fkt übergeben
Malte
- javascript
0 Kai3450 Kai3450 Matthias Apsel0 Malte
0 molily
Hallo,
ich füge mehreren Elementen durch eine for-Schleife ein Event als
anonyme Funktion hinzu und möchte für jeden Schleifen-Durchlauf den aktuellen
Zähler-Wert gewissermaßen "einfrieren", weil ich diesen für den Inhalt der
jeweiligen Funktion benötige - Beispiel:
var wrapper = document.getElementById('wrapper'),
elems = wrapper.getElementsByTagName('div'),
i;
for (i=0; i<elems.length; i++) {
elems[i].onclick = function() {set_color(i);}
}
Dieses Beispiel funktioniert natürlich nicht, weil der Zähler i den Wert
des letzten Durchlaufs der Schleife haben wird, sobald onclick in Kraft tritt.
Wie kann ich für z.B. elems[7] diese 7 möglichst einfach "retten" in die
anonyme Funktion?
Bestimmt ist die Lösung ganz einfach, aber stehe gerade total auf'm Schlauch...
Lieben Dank,
Malte
[latex]Mae govannen![/latex]
Wie kann ich für z.B. elems[7] diese 7 möglichst einfach "retten" in die
anonyme Funktion?
Es gibt mehrere Möglichkeiten.
Die "klassische" Version mit Closure sieht in Etwa so aus:
https://forum.selfhtml.org/?t=206574&m=1402637
(wobei man das mit einer Hilfsfunktion vereinfachen kann, wenn man diese konstrukte des Öfteren verwendet)
oder einfacher in der Schleife dem Element einfach eine Eigenschaft anhängen:
elems[i].countervalue = i;
diese Eigenschaft kann man dann über die Elementreferenz, die man beim Kilck ja hat, einfach wuieder auslesen.
Stur lächeln und winken, Männer!
Kai
[latex]Mae govannen![/latex]
Und wieder hab ich ungeschickt
den Sendeknopf zu früh gedrückt
Bevor mich also and're plagen
möchte ich jetzt schnell noch sagen
daß dies nicht alle Wege waren
die Variablenwerte zu bewahren
Jedoch, so denk ich auf die Schnelle
reicht es für fast alle Fälle
Und fragst du dich nach weit'rem "wie"
erklärt es vielleicht molily.
Stur lächeln und winken, Männer!
Kai
[latex]Om~nah~hoo~pez~nyeetz,~Kai345![/latex]
YMMD!
Matthias
Vielen Dank für Hülf und Reime
da werd ich gleichma loslegen
die zähler zwingen hier daheime
sich in die anonyme Funktion zu bewegen.
:-}
Hallo,
Wie kann ich für z.B. elems[7] diese 7 möglichst einfach "retten" in die anonyme Funktion?
Je nachdem, was du vorhast, gibt es, Kai hat es schon angedeutet ;), Alternativen zum Erzeugen von Closures und dem Speichern der Daten beim Element.
Wenn du in set_color ohnehin nur elems[i] benötigst, kannst du die Sache vereinfachen und set_color direkt das angeklickte Element übergeben.
elems[i].onclick = function () {
set_color(this);
};
Siehe Zielelement des Events.
Oder du definierst set_color direkt als Handler-Funktion, dann verweist this darin auf das Element:
elems[i].onclick = set_color;
function set_color () {
this.style.color = 'red';
}
Oder du überwachst sämtliche click-Ereignisse beim Wrapper (Event-Delegation) und kannst auf die Schleife verzichten:
Mathias