In den Dokumenten ist ziemlich klar, warum Sie Live nicht verwenden möchten. Auch wie von Felix erwähnt, .on
ist es eine rationalere Art, Ereignisse anzuhängen.
Die Verwendung der .live () -Methode wird nicht mehr empfohlen, da spätere Versionen von jQuery bessere Methoden bieten, die keine Nachteile haben. Insbesondere bei der Verwendung von .live () treten folgende Probleme auf:
- jQuery versucht, die vom Selektor angegebenen Elemente abzurufen, bevor die
.live()
Methode aufgerufen wird. Dies kann bei großen Dokumenten zeitaufwändig sein.
- Verkettungsmethoden werden nicht unterstützt. Zum Beispiel
$("a").find(".offsite, .external").live( ... );
ist
nicht gültig und nicht wie erwartet funktionieren.
- Da alle
.live()
Ereignisse an das document
Element angehängt sind , nehmen Ereignisse den längsten und langsamsten Pfad, bevor sie behandelt werden.
- Das Aufrufen
event.stopPropagation()
des Ereignishandlers ist unwirksam, wenn Sie die unten im Dokument angehängten Ereignishandler stoppen. Das Ereignis hat sich bereits verbreitet
document
.
- Die
.live()
Methode interagiert mit anderen Ereignismethoden auf eine Weise, die überraschend sein kann, z. B.
$(document).unbind("click")
entfernt sie alle Klick-Handler, die durch einen Aufruf von .live()
!
live()
es so geändert wird, dass es das Verhalten von haton()
, kann es vorhandenen Code beschädigen. Die jQuery-Leute haben gezeigt, dass sie nicht unbedingt Angst haben, Legacy-Code zu "brechen", aber ich nehme an, dass sie in diesem Fall entschieden haben, dass es sinnvoll ist, keine Regressionen zu riskieren.live()
wurde in 1.7 veraltet und in 1.9 entfernt. api.jquery.com/liveEin Unterschied, über den Benutzer beim Wechsel von
.live()
nach stolpern ,.on()
besteht darin, dass sich die Parameter für.on()
geringfügig unterscheiden, wenn Ereignisse an Elemente gebunden werden, die dynamisch zum DOM hinzugefügt werden.Hier ist ein Beispiel für die Syntax, die wir für die
.live()
Methode verwendet haben:Jetzt mit
.live()
in jQuery - Version veraltet ist 1.7 und entfernt in der Version 1.9, sollten Sie die Verwendung.on()
Methode. Hier ist ein äquivalentes Beispiel mit der.on()
Methode:Bitte beachten Sie, dass wir
.on()
eher gegen das Dokument als gegen die Schaltfläche selbst anrufen . Wir geben den Selektor für das Element an, dessen Ereignisse wir im zweiten Parameter abhören.Im obigen Beispiel rufe ich
.on()
das Dokument auf. Sie erhalten jedoch eine bessere Leistung, wenn Sie ein Element verwenden, das näher an Ihrer Auswahl liegt. Jedes Vorfahrenelement funktioniert, solange es auf der Seite vorhanden ist, bevor Sie es aufrufen.on()
.Dies wird hier in der Dokumentation erklärt , ist aber leicht zu übersehen.
quelle
Siehe den offiziellen Blog
quelle
Diese Methode wird verwendet, um einen Ereignishandler für alle Elemente anzuhängen, die jetzt und in Zukunft mit dem aktuellen Selektor übereinstimmen.
und
Diese Methode wird verwendet, um eine Ereignishandlerfunktion für ein oder mehrere Ereignisse an die unten aufgeführten ausgewählten Elemente anzuhängen.
quelle
Gutes Tutorial zum Unterschied zwischen on und live
Zitat aus dem obigen Link
quelle
Weitere Informationen finden Sie unter .. .live () und .on ()
Die Methode .live () wird verwendet, wenn Sie sich mit der dynamischen Generierung von Inhalten befassen ... wie ich sie in einem Programm erstellt habe, das eine Registerkarte hinzufügt, wenn ich den Wert eines Jquery-Schiebereglers ändere und die Funktion zum Schließen von Schaltflächen an alle Registerkarten anhängen möchte was generiert wird ... der Code, den ich versucht habe, ist ..
und es funktioniert sehr cool ...
quelle
Ich bin der Autor einer Chrome-Erweiterung "Comment Save", die jQuery verwendet, und einer, die verwendet wurde
.live()
. Die Erweiterung funktioniert, indem ein Listener an alle verwendeten Textbereiche angehängt wird.live()
- Dies funktionierte gut, da der Listener bei jeder Änderung des Dokuments immer noch an alle neuen Textbereiche angehängt wurde.Ich bin umgezogen,
.on()
aber es funktioniert nicht so gut. Der Listener wird nicht angehängt, wenn sich das Dokument ändert. Daher habe ich wieder verwendet.live()
. Das ist ein Fehler, den ich denke.on()
. Sei einfach vorsichtig, denke ich.quelle
.live()
Methode. Das Äquivalent.on()
für$('p').live('click', function () { alert('clicked'); });
ist$(document).on('click', 'p', function () { alert('clicked'); });
. Beachten Sie, dass Sie die.on()
Methode für das verwendendocument
und dann das Element, an das Sie den Ereignishandler anhängen möchten, in seinem zweiten Parameter anhören möchten.Ich muss das Ereignis "Browser geschlossen" identifizieren. Nach der Recherche folge ich mit jQuery 1.8.3
Aktivieren Sie ein Flag mit der folgenden jQuery, wenn Sie auf den Hyperlink klicken
$ ('a'). live ('click', function () {cleanSession = false;});
Aktivieren Sie ein Flag mit der folgenden jQuery, wenn Sie auf einen beliebigen Typ der Eingabeschaltfläche klicken
$ ("input [type = submit]"). live ('click', function () {alert ('input button clicked'); cleanSession = false;});
$ ('form'). live ('submit', function () {cleanSession = false;});
Jetzt wichtig ... meine Lösung funktioniert nur, wenn ich stattdessen .live .on verwende. Wenn ich .on verwende, wird das Ereignis ausgelöst, nachdem das Formular gesendet wurde und was zu spät ist. Oft werden meine Formulare mit einem Javascript-Aufruf (document.form.submit) gesendet.
Es gibt also einen entscheidenden Unterschied zwischen .live und .on. Wenn Sie .live verwenden, werden Ihre Ereignisse sofort ausgelöst, aber wenn Sie zu .on wechseln, wird es nicht rechtzeitig ausgelöst
quelle
.on
falsch verwenden oder etwas anderes in Ihrem Code verursacht dies. Fügen Sie möglicherweise Ihren Code für Ihre.on
Methode ein.