Krautkanal.com

Veröffentlicht am 2015-03-23 08:51:51 in /prog/

/prog/ 6855: Bernd du bist doch zufällig Experte was JavaScript...

karalek Avatar
karalek:#6855

Bernd du bist doch zufällig Experte was JavaScript angeht. Wieso tritt folgendes Phänomen auf?

Hab leider auf Stapelüberlauf nichts passendes dazu gefunden. Ich hoffe du kannst mich erhellen, Danke Bernd.

buddhasource Avatar
buddhasource:#6856

An sich hat Javascript Abschlüsse, so dass das funktionieren sollte.

https://de.wikipedia.org/wiki/Closure

agromov Avatar
agromov:#6857

Das i ist für alle Callbacks eine Closure aus dem Kontext der Schleife.

Würde eine Funktion mit Paramerter i aufrufen, die dann addEventListener macht.

funwatercat Avatar
funwatercat:#6859

>>6855
Einrückung

mrzero158 Avatar
mrzero158:#6861

https://stackoverflow.com/questions/6487366/how-to-generate-event-handlers-with-loop-in-javascript

Dort wird das Problem erklärt und Korrekturen vorgeschlagen.

Generell ist solch ein Code aber eher unschön.

Eine Alternative wäre es, beim Aufruf des Handlers die ID zu übergeben:

>hello(this.id);

Oder (falls du nur die Zahl willst) den HTML-Elementen mit den Handlern data-*-Attribute zu geben (ab HTML5 können Elementen eigene Attribute hinzugefügt werden, die jedoch mit data- beginnen müssen). Hier hat jeweils das Attribut data-box den passenden Wert bekommen, der dann im Handler abgefragt und übergeben wird:

>hello(this.getAttribute('data-box'));

Der Handler hat den Kontext des Elementes, auf dem das Event getriggert wurde. Dies bedeutet, dass sich this hier auf das geklickte Element bezieht, deswegen liefert this.getAttribute auch immer den korrekten Wert zurück...

Ein div könnte dann so aussehen:

><div id="box1" data-box="1">Box 1</div>

Außerdem:

* Afaik sollte window.onload vermieden werden, da es sich hier um ein Property handelt, das dein Skript somit komplett für sich beanspruchen würde. Besser wäre es, passende ready-Events zu verwenden und dafür eine Callback zu definieren.

* Bitte setze dich mit dem Thema Einrückung auseinander.

Neuste Fäden in diesem Brett: