Ich versuche, das jQuery-Äquivalent dieses JavaScript-Methodenaufrufs zu finden:
document.addEventListener('click', select_element, true);
Ich bin so weit gekommen wie:
$(document).click(select_element);
dies führt jedoch nicht zum selben Ergebnis wie der letzte Parameter der JavaScript-Methode - ein Boolescher Wert, der angibt, ob der Ereignishandler in der Erfassungsphase oder in der Bubbling-Phase ausgeführt werden soll (nach meinem Verständnis von http: // www .quirksmode.org/js/events_advanced.html ) - wird ausgelassen.
Wie kann ich diesen Parameter angeben oder auf andere Weise mithilfe von jQuery die gleiche Funktionalität erzielen?
Nicht alle Browser unterstützen die Ereigniserfassung (z. B. Internet Explorer-Versionen unter 9 nicht), aber alle unterstützen das Sprudeln von Ereignissen. Aus diesem Grund wird diese Phase verwendet, um Handler an Ereignisse in allen browserübergreifenden Abstraktionen zu binden, einschließlich jQuery.
Das, was Sie in jQuery am nächsten suchen, ist bind()
(ersetzt durch on()
in jQuery 1.7+) oder ereignisspezifische jQuery-Methoden (in diesem Fall click()
, die bind()
trotzdem intern aufrufen). Alle nutzen die Sprudelphase eines erhöhten Ereignisses.
Ab jQuery 1.7 ist .on()
jetzt die bevorzugte Methode zum Binden von Ereignissen anstelle von .bind()
:
Von http://api.jquery.com/bind/ :
Ab jQuery 1.7 ist die .on () -Methode die bevorzugte Methode zum Anhängen von Ereignishandlern an ein Dokument. In früheren Versionen wird die .bind () -Methode verwendet, um einen Ereignishandler direkt an Elemente anzuhängen. Handler werden an die aktuell ausgewählten Elemente im jQuery-Objekt angehängt, sodass diese Elemente an dem Punkt vorhanden sein müssen, an dem der Aufruf von .bind () erfolgt. Eine flexiblere Ereignisbindung finden Sie in der Diskussion der Ereignisdelegierung in .on () oder .delegate ().
Die Dokumentationsseite befindet sich unter http://api.jquery.com/on/
Das Nächste wäre die Bindefunktion:
$('#foo').bind('click', function() {
alert('User clicked on "foo."');
});
Zu beachten ist, dass jQuery-Ereignismethoden load
nicht auf embed
-Tags auslösen/abfangen, die SVG-DOM enthalten und als separates Dokument im embed
-Tag geladen werden. Die einzige Möglichkeit, ein load
-Ereignis für diese Ereignisse abzufangen, war die Verwendung von unformatiertem JavaScript.
Dies wird nicht funktionieren (ich habe versucht on
/bind
/load
Methoden):
$img.on('load', function () {
console.log('FOO!');
});
Dies funktioniert jedoch:
$img[0].addEventListener('load', function () {
console.log('FOO!');
}, false);
Sie sollten jetzt die Funktion .on()
verwenden, um Ereignisse zu binden.
Im Folgenden finden Sie eine hervorragende Behandlung für Standard-JavaScript im Mozilla Development Network (MDN) dieser Ausgabe (wenn Sie sich nicht auf jQuery verlassen oder es allgemein besser verstehen möchten):
https://developer.mozilla.org/en-US/docs/DOM/element.addEventListener
Hier ist eine Diskussion des Ereignisflusses von einem Link in der obigen Behandlung:
http://www.w3.org/TR/DOM-Level-3-Events/#event-flow
Einige wichtige Punkte sind: