Hallo!
Ich bin gerade dabei, eine addEvent-Funktion zu schreiben, die Browser-Unabhängigkeit
gewährleisten soll - mit folgenden features:
1. alle Browser werden unterstützt (insbesondere IE und alte Browser, die weder
addEventListener noch attachEvent kennen);
2. optional kann ein Array mit Parametern für den Handler übergeben werden;
3. mehrere Elemente können durch einen einzigen Funktionsaufruf zum listener werden;
4. event.stopPropagation
, event.preventDefault
und event.target
funktionieren
in den Handlern - in allen Browsern;
5. den capture-Modus auf true
zu setzen klappt nicht nur in modernen Browsern.
1-4 habe ich bereits abgehandelt - 5 ist das große Problem.
Meine Idee war, wenn für capturing ein true
übergeben
wird, bei den Browsern, die addEventListener nicht kennen, zunächst über eine
Hilfsfunktion einen Array zu erstellen, der die Reihenfolge festlegt, in der
die ganzen Handler vom target zum document feuern und diese dann manuell aufzurufen.
Nun gibt's da aber leider 2 große Hürden:
1. Die Reihenfolge hängt ja nicht nur vom capturing-Modus des target-Elements ab;
das hieße wohl (wenn ich das capturing/bubbling-Konzept richtig verstanden habe,
dass ich für jedes Element/Handler-Paar auch den cap-Modus irgendwo speichern muss.
Das wäre nicht allzu schlimm, weil ich für die Browserkompatibilität sowieso
hash tables anlegen muss (z.B. elem.events[type][handler-id] = handler);
2. Dann kommt da aber noch die Möglichkeit hinzu, dass in einer (oder mehreren) der
Handler-Funktionen ein event.stopPropagation(); notiert ist. Diese Information
müsste also entweder als Parameter addEvent übergeben oder auf ganz
umständliche sonstige Weise erhalten werden.
Hat sich hier jemand schon einmal die Mühe gemacht, für IE den capturing-Modus
zu simulieren oder weiß kennt einfach so einen Trick, den er aus seinem Ärmel hier
ins Forum schütteln kann?
Vielen lieben Dank,
Laura