jQuery verhindern, dass alle Ereignis-bubbling
Ich bin mit jQuery ist es widget-factory und verwenden von benutzerdefinierten Ereignissen für die Behandlung von Ereignissen in meiner Anwendung.
Dies bedeutet, dass alle meine Veranstaltung verbindlich sieht viel wie:
//...in the widget factory code
$(this.element).addClass('customEventClass');
$(this.element).bind('mysite.loadNextPage', $.proxy(this, 'loadNextPage');
und die Ereignisse ausgelöst werden durch tun:
$('.customEventClass').trigger('mysite.loadNextPage');
Weil die Veranstaltungen werden direkt an die Elemente, die Notwendigkeit, Sie zu erhalten, brauche ich nicht, Sie haben diese benutzerdefinierte Ereignisse Blase oben durch den DOM. Ich weiß, ich kann überprüfen, ob das auch hat gequasselt, oder nicht dadurch in die event-handler-code:
if (event.target != event.currentTarget) {
event.stopPropagation();
event.preventDefault();
return;
}
Aber in dem moment, da die meisten Elemente, die zu hören sind, die für die benutzerdefinierte Ereignisse müssen nicht ein handler registriert für 'mysite.loadNextPage' gibt es 51 Ereignisse, die generiert werden, wo nur 1 eigentlich gar nichts. Gibt es eine Möglichkeit entweder:
- sagen, jQuery, nicht zu Blasen-diese Ereignisse überhaupt nicht oder
- Fügen Sie eine Standard-stop-propagation' - handler, um alle DOM-Objekte, die der Klasse 'customEventClass" zu stoppen, Sie sprudelt bis ein Ereignis, dass Sie nicht eine bestimmte handler für.
Oder gibt es andere gute Verfahren für die nur auslösende Ereignisse für Elemente interessant, die in diesen Ereignissen, anstatt viele Ereignisse ausgelöst werden, für Elemente, die nicht daran interessiert sind, diese Ereignisse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie ebenfalls false zurück von Ihrem event-handler-Funktion zu stoppen, die Ausbreitung, das ist, was ich normalerweise verwenden:
Sehen http://api.jquery.com/on/
Sieht es aus wie es gibt keinen guten Weg, es zu tun mit jQuery, wie es ist, aber es ist sehr einfach zu schreiben ist eine neue Funktion, um dies zu ermöglichen.
Zuerst schrieb ich eine neue Funktion zu stoppen, die Veranstaltung sprudelt (und auch das Ereignis anmelden, warum nicht).
Und nun eine neue Funktion Hinzugefügt werden, ist jQuery.
Dann anstelle der Bindung die Funktion wie folgt:
Stattdessen binden Sie es wie folgt.
Dies bedeutet, dass, wenn das Ereignis ausgelöst wird, das erste element, das wartet auf dieses Ereignis rufen Ereignis.stopPropagation auf der Veranstaltung, und so wird es nicht sprudeln, um andere Elemente, die möglicherweise auch hören von der Veranstaltung.