LenaLuna: Nochmals Eventhandling im IE

Hallo miteinander,

Nochmals Eventhandling in IE.

Habe unter folgender URL Testseite stehen.

http://www.lenas.ch/temp/ereignis.htm

Zwei Ebenen werden mit einem onclick-handler versehen.

document.getElementById("ebene_weiss").attachEvent("onclick", handler);
document.getElementById("ebene_schwarz").onclick = handler;

Bei der weissen Ebene wird der Handler mit attachEvent() und bei der schwarzen Ebene der Handler mit einer Zuweisung an die Eigenschaft onclick registriert.

Mit

alert(this.name);

sollte in der Handlerfunktion der Name des Objektes das den Event empfangen hat ausgegeben werden.

Bei der schwarzen Ebene erhalte ich den Namen des Windowsobjektes.
Bei der weissen Ebene funktioniert die Sache korrekt.

Kann mir jemand/frau sagen warum das so ist?

Gruss, LenaLuna

  1. Hallo,

    document.getElementById("ebene_weiss").attachEvent("onclick", handler);

    alert(this.name);

    Bei der schwarzen Ebene erhalte ich den Namen des Windowsobjektes.

    Wenn ich mich recht entsinne, hast du die Frage schon einmal gestellt. Ich weiß nicht recht, was du für eine Antwort erwartest. Es hat offenbar keinen besonderen Grund, sondern »ist nun einmal so«. Man könnte es so erklären, dass die Funktion beim Speichern in der Event-Handler-Eigenschaft onclick eine Methode eben dieses Objekts ist. Bei dessen Aufruf (elementobjekt.onclick() sozusagen) zeigt this logischerweise auf das Elementobjekt. Bei attachEvent ist die Funktion nie nach außen hin eine Methode des Elementobjekts, sie wird im Kontext des window-Elements ausgeführt, wie normale Funktionen im globalen Geltungsbereich ebenfalls. Das ist aber nur eine Theorie.
    Du willst wahrscheinlich darauf hinaus, das Verhalten zu ändern, sodass du bei einem mit attachEvent vergebenen Event ebenfalls über this auf das Element zugreifen kannst, bei dem der Event registriert wurde. Dazu hatte ich schon letztens einiges ausprobiert und recherchiert, war aber ebenfalls nicht weitergekommen. Vermutlich gibt es keine Möglichkeit.

    Mathias

    1. hallo mathias,

      danke nochmals für deine mühe.
      ich habe auch noch weiter recherchiert und in dem o'reilly javascript referenz eine bemerkung gefunden.

      der unterschied zwischen den funktionen attachEvent() und addEventListener() ist tatsächlich der kontext in der die handlerfunktion ausgeführt wird. bei addEventListener als methode des Elementobjektes und bei attachEvent als globale methode des windowobjektes.

      du hast richtig vermutet. mir geht es darum mit this auf das eventauslösende objekt zuzugreifen.

      es scheint wirklich keine möglichkeit zu geben. finde ich eigentlich eine verschlechterung.

      trotzdem vielen dank

      gruss LenaLuna