Gibt es einen Unterschied zwischen dem folgenden Code?
$('#whatever').on('click', function() {
/* your code here */
});
und
$('#whatever').click(function() {
/* your code here */
});
Ich denke, der Unterschied liegt in den Nutzungsmustern.
Ich würde es vorziehen , .on
über .click
weil erstere kann weniger Speicher und arbeiten für dynamisch hinzugefügte Elemente verwenden.
Betrachten Sie das folgende HTML:
<html>
<button id="add">Add new</button>
<div id="container">
<button class="alert">alert!</button>
</div>
</html>
wo wir neue Buttons über hinzufügen
$("button#add").click(function() {
var html = "<button class='alert'>Alert!</button>";
$("button.alert:last").parent().append(html);
});
und will "Alarm!" einen Alarm anzeigen. Wir können dafür entweder "click" oder "on" verwenden.
click
$("button.alert").click(function() {
alert(1);
});
Mit dem oben genannten wird ein separater Handler für jedes einzelne Element erstellt , das dem Selektor entspricht. Das bedeutet
.on
$("div#container").on('click', 'button.alert', function() {
alert(1);
});
mit dem oben genannten einen einzigen Handler für alle Elemente , die zu Ihrer Auswahl passen, einschließlich der dynamisch erstellten.
.on
Wie Adrien weiter unten kommentierte, .on
sind Ereignisse mit Namespace ein weiterer Grund für die Verwendung .
Wenn Sie einen Handler hinzufügen, .on("click", handler)
entfernen Sie ihn normalerweise, .off("click", handler)
wodurch genau dieser Handler entfernt wird. Dies funktioniert natürlich nur, wenn Sie einen Verweis auf die Funktion haben. Was ist, wenn Sie dies nicht tun? Sie verwenden Namespaces:
$("#element").on("click.someNamespace", function() { console.log("anonymous!"); });
mit Entbindung über
$("#element").off("click.someNamespace");
on('click' ...)
, siehe stackoverflow.com/a/3973060/759452, d. h.on('click.darkenallothersections' ...)
und gleichzeitig habenon('click.displaynextstep' ...)
, dann kann ich nur diejenige lösen, die ich mit benutze.unbind('click.displaynextstep')
on()
ist der Trend in jQuery. Ich musste auf aktualisieren$(window).load(function() {});
,$(window).on("load", function (e) {})
als ich auf jQuery 3 aktualisiert habe.Nein, es gibt keinen funktionalen Unterschied zwischen den beiden Codebeispielen in Ihrer Frage.
.click(fn)
ist eine "Verknüpfungsmethode" für.on("click", fn)
. Aus der Dokumentation für.on()
:Beachten Sie, dass es sich dadurch
.on()
unterscheidet,.click()
dass delegierte Ereignishandler durch Übergeben einesselector
Parameters erstellt werden können, während.click()
dies nicht der Fall ist. Wenn.on()
es ohneselector
Parameter aufgerufen wird, verhält es sich genauso wie.click()
. Wenn Sie eine Ereignisdelegierung wünschen, verwenden Sie.on()
.quelle
selector
Parameters angezeigt . Wenn Sie.on()
ohneselector
Parameter aufrufen , gibt es keine Leistungsverbesserung gegenüber der Verwendung.click()
..on()
ist die empfohlene Methode, um alle Ihre Ereignisbindungen ab jQuery 1.7 durchzuführen. Es rollt alle Funktionen von beiden.bind()
und.live()
in eine Funktion, die das Verhalten ändert, wenn Sie verschiedene Parameter übergeben.Wie Sie Ihr Beispiel geschrieben haben, gibt es keinen Unterschied zwischen den beiden. Beide binden einen Handler an das
click
Ereignis von#whatever
.on()
bietet zusätzliche Flexibilität, damit Sie Ereignisse, die von Kindern von ausgelöst werden,#whatever
an eine einzelne Handlerfunktion delegieren können , wenn Sie dies wünschen.quelle
.live()
tut? Dies scheint auch im Widerspruch zu den anderen Antworten zu stehen, die besagen, dass es nur die Funktionalität von.click()
hat und daher nicht für zukünftige Ereignisse gilt..on()
kann es tun, was.click()
tut und was.bind()
und.live()
tun - es hängt davon ab, mit welchen Parametern Sie es aufrufen. (Einige andere Antworten erwähnten dies ebenfalls.) Beachten Sie jedoch, dass "An alle Links in #whatever binden" nicht das.live()
ist, was es tut, sondern das, was es.delegate()
tut..live()
bindet an alle im Inneren,document
anstatt Sie den Container angeben zu lassen. Hinweis.live()
ist ab jQuery 1.7 ebenfalls veraltet.Wie in den anderen Antworten erwähnt:
Beachten Sie jedoch, dass dies
.on()
mehrere andere Parameterkombinationen unterstützt, die.click()
dies nicht tun, sodass die Ereignisdelegierung (Ersetzen.delegate()
und.live()
) verarbeitet werden kann.(Und offensichtlich gibt es andere ähnliche Verknüpfungsmethoden für "Keyup", "Focus" usw.)
Der Grund, warum ich eine zusätzliche Antwort poste, ist zu erwähnen, was passiert, wenn Sie
.click()
ohne Parameter aufrufen :Beachten Sie, dass Sie bei
.trigger()
direkter Verwendung auch zusätzliche Parameter oder ein jQuery-Ereignisobjekt übergeben können, mit denen Sie nicht arbeiten können.click()
.Ich wollte auch erwähnen, dass, wenn Sie sich den jQuery-Quellcode (in jquery-1.7.1.js) ansehen, Sie sehen, dass die Funktion
.click()
(oder.keyup()
usw.) intern tatsächlich.on()
oder aufruft.trigger()
. Dies bedeutet natürlich, dass Sie sicher sein können, dass sie tatsächlich das gleiche Ergebnis erzielen, aber es bedeutet auch, dass die Verwendung.click()
ein wenig mehr Aufwand verursacht - unter den meisten Umständen nichts, worüber Sie sich Sorgen machen oder darüber nachdenken müssen, aber theoretisch könnte dies unter außergewöhnlichen Umständen von Bedeutung sein.BEARBEITEN: Beachten
.on()
Sie schließlich, dass Sie mehrere Ereignisse in einer Zeile an dieselbe Funktion binden können, z.quelle
.click()
.)Nein, gibt es nicht.
Der Punkt
on()
ist die anderen Überladungen und die Fähigkeit, Ereignisse zu verarbeiten, die keine Verknüpfungsmethoden haben.quelle
Sie scheinen gleich zu sein ... Dokumentation über die Funktion click () :
Dokumentation über die Funktion on () :
quelle
.click
vs besser ist als der andere.on
.click
Ereignisse funktionieren nur, wenn das Element gerendert wird, und werden nur an Elemente angehängt, die geladen werden, wenn das DOM bereit ist..on
Ereignisse werden dynamisch an DOM-Elemente angehängt. Dies ist hilfreich, wenn Sie ein Ereignis an DOM-Elemente anhängen möchten, die auf Ajax-Anforderung oder etwas anderem gerendert werden (nachdem das DOM bereit ist).quelle
Hier erhalten Sie eine Liste mit verschiedenen Möglichkeiten, das Klickereignis anzuwenden. Sie können entsprechend als geeignet auswählen oder, wenn Ihr Klick nicht funktioniert, einfach eine Alternative aus diesen ausprobieren.
quelle
Sie haben jetzt click () veraltet, also am besten mit on ('click')
quelle
Soweit aus dem Internet und einigen Freunden gelernt, wird .on () verwendet, wenn Sie Elemente dynamisch hinzufügen. Aber als ich es auf einer einfachen Anmeldeseite verwendete, auf der das Klickereignis AJAX an node.js senden und bei der Rückkehr neue Elemente anhängen sollte, begann es, Multi-AJAX-Aufrufe aufzurufen. Als ich es in click () geändert habe, ist alles richtig gelaufen. Eigentlich war ich vorher nicht mit diesem Problem konfrontiert.
quelle
NEUE ELEMENTE
Als Ergänzung zu den oben genannten umfassenden Antworten, um kritische Punkte hervorzuheben, wenn der Klick an neue Elemente angehängt werden soll:
quelle
$(document).on('click','.UPDATE',function(){ });
Daten von Zeilendaten in Form kein JQuery-Ereignis . Diese Zeit funktioniert effektiv wie die gleichen abgerufenen Daten mithilfe von jquery. Schaltfläche funktioniert zum Zeitpunkt der Aktualisierung oder Löschung nicht:quelle