Events?

smisonline

Grünschnabel
Hallo,

ich möchte in eienr Shcleife Daten eines Arrays in Events umwandeln. Aktuell mach ich für jeden Eintrag einen extra Cdebloc, siehe Beispielcode.

Der GRund dafür ist, das leider der Wert Zeittyp beim Auftreten des Events immer von der letzten Zuordnung genommen wird. Deshalb habe ich im Event immer die Hilfsvariabel mit var zeittyp nochmal definiert. Wie kann ich das umgehen, bzw. beim Eventaufruf die richtige Zuordnung bekommen?

Code:
					if(zeittyp == "urlaub") {
						label[zeittyp].addListener("mousedown", function(e) {
							var zeittyp = "urlaub";
							this.selectedZeittyp.setValue(this.zeittypen[zeittyp]["title"]);
							this.selectedZeittyp.setBackgroundColor(this.zeittypen[zeittyp]["bgcolor"]);
							this.selectedZeittyp.setUserData("zeittyp",zeittyp);
							},this);
						}
						
					if(zeittyp == "krank") {
						label[zeittyp].addListener("mousedown", function(e) {
							var zeittyp = "krank";
							this.selectedZeittyp.setValue(this.zeittypen[zeittyp]["title"]);
							this.selectedZeittyp.setBackgroundColor(this.zeittypen[zeittyp]["bgcolor"]);
							this.selectedZeittyp.setUserData("zeittyp",zeittyp);
							},this);
						}
 
Du musst ein Closure hinzufügen, sonst speichert der JS-Interpreter nur die Referenzen der Variablen und kopiert sie nicht.

Folgendes sollte funktionieren:
Javascript:
label[zeittyp].addEventListener("mousedown", (function(zt)
{
  return function(evt)
  {
    this.selectedZeittyp.setValue(this.zeittypen[zt]["title"]);
    this.selectedZeittyp.setBackgroundColor(this.zeittypen[zt]["bgcolor"]);
    this.selectedZeittyp.setUserData("zeittyp",zt);
  }
})(zeittyp));
 

Neue Beiträge

Zurück