Knoedl: nachtraegliche zuweisung an events und mehrere object instanzen

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

  1. 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

  2. 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.