nachtraegliche zuweisung an events und mehrere object instanzen
Knoedl
- javascript
0 Knut Meinke0 Struppi
Hi!
Es geht um folgendes kleines beispiel:
http://www.ilo.de/~ilo02288/test.html
Schaut euch mal bitte kurz den knappen quelltext an.
beim laden wird die funktion blabla der ersten instanz des objekts testobject aufgerufen gibt korrekt die instanznummer (index) aus. also 0. der gleiche aufruf wird an onmousedown des bildes gebunden. und dann gibt alert undefined aus. Warum das so ist habe ich mittlerweile einen blassen schimmer. onmousedown wird quasi mit testobject.instances[this.index].blabla ueberschrieben, und das "this" in der funktion blabla bezieht sich danach nicht mehr auf testobject, sondern auf das bild.
Hoffe das Problem ist irgendwie verstaendlich.
Wie laesst sich das Konzept mit der nachtraeglichen bindung an events retten?
Vielen Dank fuer eure Hilfe!
L.Denver Mint
Hi,
Wie laesst sich das Konzept mit der nachtraeglichen bindung an events retten?
Mit der attachEvent/addEvent Methode.
attachEvent docu:
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/attachevent.asp
addEventListener docu:
http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-EventTarget-addEventListener
Zur Kompatibilität und beispiel code guckste:
http://www.quirksmode.org/dom/w3c_events.html
viel spaß damit - ist nen mächtig ding! :)
Gruß Knut
Es geht um folgendes kleines beispiel:
http://www.ilo.de/~ilo02288/test.html
Schau mal in die FAQ wie man verlinkt.
beim laden wird die funktion blabla der ersten instanz des objekts testobject aufgerufen gibt korrekt die instanznummer (index) aus. also 0. der gleiche aufruf wird an onmousedown des bildes gebunden. und dann gibt alert undefined aus. Warum das so ist habe ich mittlerweile einen blassen schimmer. onmousedown wird quasi mit testobject.instances[this.index].blabla ueberschrieben, und das "this" in der funktion blabla bezieht sich danach nicht mehr auf testobject, sondern auf das bild.
Eine Event Zuweisung in der Art:
[Object].onevent = func;
bedeutet dass in der Funktion func() this = [Object] ist.
also bei dir:
document.getElementById("test").onmousedown = testobject.instances[this.index].blabla;
(da würde auch reichen this.blabla)
Das Ergebnis von: document.getElementById("test")
Wie laesst sich das Konzept mit der nachtraeglichen bindung an events retten?
Du musst dem Objekt this irgendwie bekannt machen. entweder du gibst ihm dieses als Eigenschaft mit:
document.getElementById("test").obj = this;
document.getElementById("test").onmousdown = function()
{
alert(this.obj);
}
Oder du verwendest eine Lokale Variabel:
var tmp = this;
document.getElementById("test").onmousdown = function()
{
alert(tmp);
}
Struppi.