Unterschied zwischen .auf('click') vs .klicken Sie auf()
Ist, gibt es einen Unterschied zwischen dem folgenden code?
$('#whatever').on('click', function() {
/* your code here */
});
und
$('#whatever').click(function() {
/* your code here */
});
InformationsquelleAutor bgcode | 2012-02-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, der Unterschied liegt im Verhalten.
Ich würde lieber
.on
über.click
weil die ehemaligen kann verwenden weniger Speicher, und arbeiten für dynamisch hinzugefügte Elemente.Betrachten Sie den folgenden html-Code:
wo wir neue Schaltflächen hinzufügen über
wollen "Alarm!" zu zeigen, eine Warnung. Wir können entweder "auf" oder "auf".
Wenn wir
click
mit den oben genannten, eine separate handler erzeugt wird, für jedes einzelne element , passt der Selektor. Das bedeutet, dass
Wenn wir
.on
mit den oben genannten, eine single handler für alle Elemente passend zu Ihrem selector, auch die, die dynamisch erstellt werden.
...ein weiterer Grund für die Verwendung
.on
Als Adrien unten kommentiert, ein weiterer Grund für die Verwendung
.on
ist mit Namespaces Veranstaltungen.Wenn Sie fügen Sie einen Ereignishandler mit
.on("click", handler)
Sie normalerweise Entferne es mit.off("click", handler)
die entfernt, sehr hf. Offensichtlich funktioniert dies nur, wenn Sie einen Verweis auf die Funktion, wenn du also was nicht ? Sie namespaces verwenden:mit unverbindlich über
korrigieren Sie mich, wenn ich falsch bin, aber ich glaube, dass ein weiterer Vorteil ist die Verwendung von namespaces wenn mit
on('click' ...)
finden Sie unter stackoverflow.com/a/3973060/759452 dh.on('click.darkenallothersections' ...)
und in der gleichen Zeit, habenon('click.displaynextstep' ...)
, dann kann ich die Bindung nur die, die ich wählen, mit.unbind('click.displaynextstep')
guter Punkt, Hinzugefügt, um die Antwort!
Kann mir jemand erklären, warum .auf kann arbeiten für dynamisch hinzugefügte Element aber .klicken Sie nicht?
on()
ist der trend in jQuery. Ich hatte zu aktualisieren$(window).load(function() {});
zu$(window).on("load", function (e) {})
wenn ich ein Upgrade auf jQuery 3.InformationsquelleAutor andreister
Nein, es gibt keinen funktionalen Unterschied zwischen den beiden code-Beispiele in deiner Frage.
.click(fn)
ist ein "shortcut-Methode" für.on("click", fn)
. Von die Dokumentation für.auf()
:Beachten Sie, dass
.on()
unterscheidet sich von.click()
im dass es hat die Fähigkeit zu schaffen Delegierte event-Handler, indem eineselector
parameter, in der Erwägung, dass.click()
nicht. Wenn.on()
aufgerufen, ohne eineselector
parameter, verhält es sich genau das gleiche wie.click()
. Wenn Sie möchten, event-delegation, verwenden Sie.on()
.vernachlässigbar ist am besten. Wir nehmen einstellige Millisekunden.
das ist eine große Sache für mich aber ich interessiere mich dafür, weil ich bis zu 3000 Fragen auf einer Seite, die events benötigt. Eine milisec jeder macht meiner Seite nehmen Sie 3 Sekunden mehr Zeit. Dein Kommentar ist nicht hilfreich für große Listen.
Das größere Problem ist, warum Sie haben, 3000 Fragen auf einer Seite. Wenn Sie nach der guten UI-Muster sollte nie müssen Sie, viel Informationen auf einer Seite. Schauen Sie in der paging-oder lazy loading. Auch mit event-delegation von einem einzigen Ereignis-handler für alle diese Elemente wäre besser.
Der performance-Gewinn ist nur zu sehen, wenn mit " event-delegation, indem ein
selector
parameter. Wenn Sie anrufen.on()
ohneselector
parameter gibt es keine performance-Verbesserung gegenüber der Verwendung.click()
.InformationsquelleAutor gilly3
.on()
ist der empfohlene Weg, um alles tun, Ihre Veranstaltung verbindlich wie der jQuery-1.7. Es rollt sich alle Funktionen der beiden.bind()
und.live()
in einer Funktion verändert Verhalten, wie Sie es passieren verschiedene Parameter.Als Sie geschrieben haben, dein Beispiel gibt es keinen Unterschied zwischen den beiden. Beide binden Sie einen handler an das
click
Falle#whatever
.on()
bietet zusätzliche Flexibilität, damit Sie zum delegieren der events werden ausgelöst durch Kinder#whatever
auf einen einzigen handler-Funktion, wenn Sie wählen..live()
? Auch dies scheint im Widerspruch mit den anderen Antworten, die sagen, dass es nur die Funktionalität der.click()
, und daher beziehen sich nicht auf zukünftige Ereignisse.Dies widerspricht nicht der anderen Antworten, denn wie Interrobang sagt im ersten Absatz
.on()
tun können, was.click()
und tun, was.bind()
und.live()
tun - es hängt davon ab, welche Parameter Sie es nennen. (Einige andere Antworten erwähnt dies auch.) Beachten Sie aber, dass "Binden alle links innerhalb von #whatever" ist nicht, was.live()
tut, ist es, was.delegate()
tut..live()
bindet alle indocument
sondern lassen Sie Sie geben Sie den container an. Beachten Sie auch.live()
ist veraltet von jQuery 1.7 ab.+1 für Delegierte Ereignisse: "Durch die Kommissionierung ein element ist garantiert an der Zeit, den Delegierten event-handler angeschlossen ist, können Sie verwenden Sie die Delegierte Ereignisse zu vermeiden, die Notwendigkeit, Häufig anfügen und entfernen von Ereignis-Handlern." api.jquery.com/on
InformationsquelleAutor Interrobang
Wie erwähnt von den anderen Antworten:
Bemerkte aber, dass
.on()
unterstützt mehrere andere parameter-Kombinationen, die.click()
nicht, wodurch es zu verarbeiten Ereignis-delegation (Installation.delegate()
und.live()
).(Und offensichtlich gibt es andere ähnliche shortcut-Methoden für die "keyup", "focus", etc.)
Der Grund, ich bin Entsendung eine extra Antwort ist zu erwähnen, was passiert, wenn Sie anrufen
.click()
ohne Parameter:Stellt fest, dass, wenn Sie
.trigger()
direkt können Sie auch zusätzliche Parameter oder ein jQuery-event-Objekt, das Sie nicht tun können, mit.click()
.Wollte ich auch erwähnen, dass wenn man sich den jQuery source code (in jquery-1.7.1.js) wirst du sehen, dass intern die
.click()
(oder.keyup()
usw.) die Funktion wird tatsächlich rufen.on()
oder.trigger()
. Offensichtlich bedeutet dies, können Sie sicher sein, dass Sie wirklich das gleiche Ergebnis, aber es bedeutet auch, dass mit.click()
hat ein klein wenig mehr Aufwand - nicht etwas sorgen zu machen oder sogar denken, in den meisten Fällen, aber theoretisch könnte es egal in außergewöhnlichen Umständen.EDIT: Abschließend noch der Hinweis, dass
.on()
können Sie binden mehrere Veranstaltungen, um die gleiche Funktion in einer Zeile, z.B.:Ja. Für "standard" nicht-Delegierte event-Handler, die beide Methoden die gleiche Sache und tun der performance-Unterschied ist negligable, also welche Methode Sie verwenden, ist wirklich eine Frage der persönlichen Vorliebe. (Ich würde in der Regel wählen
.click()
.)+1 für den letzten Satz!
InformationsquelleAutor nnnnnn
Nein, gibt es nicht.
Der Punkt, der
on()
ist seine andere überlastungen, und die Fähigkeit, Ereignisse zu behandeln, die nicht über shortcut-Methoden..on
's Fähigkeit zu tun, Delegierte Ereignisse?Das sind die anderen überladungen.
InformationsquelleAutor SLaks
Scheinen Sie die gleichen zu sein... aus den Unterlagen des klicken Sie auf() Funktion:
Dokumentation aus der auf() Funktion:
Dies ist eine ziemlich einfach Erklärung von den docs, aber die Antwort unten ist ein gutes Beispiel dafür, warum man besser ist als die anderen in
.click
vs.on
Ich bin zufällig zu vereinbaren mit Euch 🙂
InformationsquelleAutor dana
.click
Veranstaltungen funktionieren nur, wenn das element gerendert wird und sind nur an Elemente, die geladen wird, wenn das DOM bereit ist..on
Veranstaltungen sind dynamisch verbunden sind, um DOM-Elemente, welche ist hilfreich, wenn Sie möchten, fügen Sie einen Ereignis-zu DOM-Elementen, die gerendert werden, auf ajax-request oder etwas anderes (nachdem der DOM fertig ist).InformationsquelleAutor Ramesh kumar
Hier erhalten Sie Liste der verschiedenen Möglichkeiten, die sich aus der Anwendung des click-Ereignis. Sie können wählen Sie entsprechend als suaitable oder wenn Ihr auf nicht nur arbeiten, versuchen Sie eine alternative aus diese.
InformationsquelleAutor Must Keem J
Haben Sie inzwischen veraltet klicken Sie(), also am besten zu gehen mit auf('click')
InformationsquelleAutor James Soper
Soweit ichgelernt von internet und einige Freunde .auf() wird verwendet, wenn Sie dynamisch Elemente hinzufügen. Aber wenn ich es in eine einfache login-Seite, wo Sie auf Fall senden soll AJAX an node.js und an die Rückkehr Anhängen von neuen Elementen, die es angefangen zu rufen, multi-AJAX-Aufrufe. Wenn ich es geändert auf() alles richtig gelaufen. Eigentlich habe ich nicht vor diesem problem vor.
InformationsquelleAutor Alper Bilgil
$(document).on('click','.UPDATE',function(){ });
effektiv arbeiten, wie dieselbe von abgerufenen Daten durch die Verwendung von jquery. Schaltfläche funktioniert nicht bei der update-oder delete -:InformationsquelleAutor Devang Hire