Events

Einem großen Irrtum läuft auf, wer glaubt, die Inkompatibilitäten unter den Browsern erstreckten sich nur auf (X)HTML und CSS. Auch JavaScript ist in einigen Bereichen betroffen. Einer davon ist die Behandlung von Ereignissen, die, meist durch Nutzereingaben, auftreten.

FireFox beispielsweise übergibt einem Event-Handler als Parameter ein Event-Objekt, das genauere Informationen über das aufgetretene Ereignis enthält. Es liefert zum Beispiel Informationen, um welches Event es sich handelt und auf welchem HTML-Objekt es ausgelöst wurde.

Der InternetExplorer verlangt von Event-Handlern, dass sie das Event aus "window.event" auslesen. Dort hinterlegt ist ebenfalls ein Event-Objekt, das ähnliche Informationen wie das des FireFox bereitstellt.

Die beiden Event-Objekte unterscheiden sich aber nicht zuletzt in einigen Attributsnamen. Findet der im FireFox ausgeführte Event-Handler das das Event betreffende HTML-Element unter "event.target", muss er im InternetExplorer unter "event.srcElement" suchen. Und Safari hat die Information in "event.parentNode" versteckt, allerdings nur, wenn "event.nodeType" 3 ist. Sonst findet man den Wert ebenfalls in "event.target".

Ein Event-Handler, der auf den verbreitetesten Browsern funktionieren sollte, könnte beispielsweise so aussehen:

function MyHandler(event) {
    if(!event)
        event = window.event;
    if (event.target)
        target = event.target;
    else if (event.srcElement)
        target = event.srcElement;
    if (target.nodeType == 3)
        target = target.parentNode;
   
    // hier steht der eigendliche Code
    // des Event-Handlers, der mit
    // "event" und "target" hantiert
}

Tags: Webdesign