Mehrere Click Event Listener für einen Link
root66
- javascript
1 molily
Hallo,
ich nutze ein jQuery Lightbox Skript. Die Lightbox schliesst sich automatisch mit Hilfe eines click() Listeners, wenn auf das [X] geklickt wird. Die entsprechende Funktion liefert return false; zurück, was seit jQuery 1.3 die Event-Verbreitung dann abbricht:
"As of jQuery 1.3, .trigger()ed events bubble up the DOM tree; an event handler can stop the bubbling by returning false from the handler or calling the .stopPropagation()"
Ich möchte jetzt aber vorher durch den Klick eine andere Aktion durchführen, ohne das return false; aus dem Lightbox-Skript zu entfernen. Ich habe meinen eigenen Click Listener schon vorher erstellt und der wird auch teilweise ausgeführt, aber leider nicht immer. Entferne ich das return false; im Lightbox Click-Listener, funktioniert es immer.
Wie kann ich sicherstellen, daß mein Listener immer zuerst aufgerufen wird, oder gibt es eine andere Lösung, ohne das Lightbox-Skript anzupassen?
VG,
root66
Hallo,
Bei return false führt jQuery preventDefault (Standardaktion unerdrücken) und stopPropagation (Bubbling abbrechen) aus. Letzteres kann verhindern, dass dein Handler ausgeführt wird. Aber nur, wenn er an einem darüberliegenden Element im DOM registriert wurde.
Wenn er am selben Element (wahrscheinlich am untersten im DOM-Baum) mit jQuery registriert wurde, dann sollte er auf jeden Fall ausgeführt werden. Ob vorher oder nachher, ist durch die Reihenfolge des Registrierens determiniert.
(Wenn jQuery hingegen stopImmediatePropagation aufrufen würde, so würden auch weitere registrierte Event-Handler am selben Element nicht ausgeführt.)
Meist erlauben Lightbox-Scripte auch zusätzlich, einen Handler für das Schließen zu registrieren. Schau dazu mal in der Doku des verwendeten Scriptes nach.
Allgemein solltest du die Ursache finden, warum dein Handler manchmal, aber nicht immer ausgeführt wird. Das hört sich nach einer Race Condition an, was mir hier aber unwahrscheinlich erscheint. Die Reihenfolge, in der registrierte Handler durch jQuery aufgerufen werden und das Element bubblet, ist eigentlich determiniert.
Mathias