Java Reference
In-Depth Information
Erst durch den Listener wird über die konkrete Ereignisbehandlung entschieden und die
Reaktion auch ausgelöst.
Im DOM-Eventmodell der Version 2 wird zur Registrierung eines Listeners eine Methode
addEventListener() deiniert. Die schematische Syntax sieht so aus:
Listing 9.18■ Schematische Registrierung eines Listeners bei einem Element
Element.addEventListener("eventTyp", anweisung, wann)
Der Ereignistyp ist einer der Token, die wir auch bisher schon als Eventhandler verwenden,
allerdings ohne vorangestelltes on , also etwa click oder mouseover . Die Anweisung ist
einfach eine Funktionsreferenz oder eine anonyme Funktion und der dritte Parameter ist
ein Boolean-Wert, der festlegt, ob das Ereignisobjekt auf dem Hin- ( true ) oder Rückweg
( false ) durch die Ereignishierarchie (Stichwort Bubble-Phase - siehe Abschnitt 9.3.1) abge-
fangen werden soll. Beispiele:
Listing 9.19■ Registrierung von Listenern
document.addEventListener("click", kBody, false);
document.addEventListener("mouseover", kSpan, true);
Das ganze Verfahren ist leistungsfähig, sauber und modular zu strukturieren, gut lesbar
und wartbar. Nun gibt es nur (wieder einmal) ein Problem - das alte Microsot-Ereignismo-
dell unterstützt die oizielle Listener-Technik des DOM-Konzepts nicht. Aber es gibt im
Ereignismodell von Microsot ein Alternativkonzept zum oiziellen Listener-Konzept des
DOM. Dieses arbeitet mit einer Methode namens attachEvent() . Die Methode nimmt als
ersten Parameter das Ereignis und als zweiten Parameter die Funktionsreferenz entgegen.
Sie wird wie addEventListener() an das Objekt gebunden, für das eine Reaktion erfolgen
soll, etwa so wie in dem schematischen Codefragment:
Listing 9.20■ Die Verwendung von attachEvent()
document.getElementById('mDiv').attachEvent("onclick", kDiv);
document.getElementById('mH1').attachEvent("onclick", kH1);
Sie sehen schnell, dass es in der Anwendung kaum relevante Unterschiede zum oiziellen
DOM-Konzept gibt, außer der Tatsache, dass die Ereignisse im alten Microsot-Modell doch
mit vorangestelltem on notiert werden, also genau wie bei klassischen Eventhandlern.
9.6.1■Eine universelle Funktion zur registrierung eines Listeners
Wenn man eine halbwegs universell einsetzbare Funktion zur Registrierung eines Listeners
erstellen will, kombiniert man attachEvent() und addEventListener() und hot, dass
eine enthaltene Browserweiche funktioniert und alle Browser mit der Sache klarkommen.
Mit einer Ausnahmebehandlung wir hier nicht gearbeitet, denn der Zugrif auf event wird
in einigen Browsern keine Ausnahme auswerfen, obwohl diese mit attachEvent() nicht
umgehen können. Allerdings ist auch die Variante nicht auf allen Browsern einsetzbar. Alte
Browser scheitern sowieso, aber auch von nicht ganz so alten Browsern im Macintosh-
Umfeld (etwa Internet Explorer) sind Probleme bekannt und auch im Linux-Umfeld werden
 
Search WWH ::




Custom Search