Meine Anwendung hat Dropdowns dynamisch hinzugefügt. Der Benutzer kann so viele hinzufügen, wie er benötigt.
Ich habe traditionell die live()
Methode von jQuery verwendet, um festzustellen, wann eines dieser Dropdowns bearbeitet wurde change()
:
$('select[name^="income_type_"]').live('change', function() {
alert($(this).val());
});
Ab jQuery 1.7 habe ich Folgendes aktualisiert:
$('select[name^="income_type_"]').on('change', function() {
alert($(this).val());
});
Wenn Sie sich die Dokumente ansehen, sollte dies absolut gültig sein (richtig?) - aber der Ereignishandler wird niemals ausgelöst. Natürlich habe ich bestätigt, dass jQuery 1.7 geladen ist und ausgeführt wird usw. Das Fehlerprotokoll enthält keine Fehler.
Was mache ich falsch? Vielen Dank!
javascript
jquery
jquery-1.7
Jack
quelle
quelle
live
tatsächlichon
sowieso verwendet wird, sodass ein erneutes Schreiben von Legacy-Code möglicherweise noch nicht erforderlich ist, bislive
es entfernt wird, was meiner Meinung nach 1,9 ist. Auszug aus der Quelle 1.7.1:live: function( types, data, fn ) {jQuery( this.context ).on( types, this.selector, data, fn ); return this;}
Wenn also kein Upgrade auf eine Version durchgeführt wird, in der keine Version mehr vorhandenlive
ist, ist möglicherweise kein sofortiges Update für Legacy-Code erforderlich. Für neuen Code außerhalb des Kurses wirdon()
stattdessen empfohlen. Ich dachte nur, diese Informationen könnten irgendwann jemand anderem helfen.live
zuon
.Antworten:
In der
on
Dokumentation heißt es (in Fettdruck;)):Äquivalent zu
.live()
wäre so etwas wieObwohl es besser ist, wenn Sie den Ereignishandler so nah wie möglich an die Elemente binden, dh an ein Element, das näher an der Hierarchie liegt.
Update: Bei der Beantwortung einer anderen Frage habe ich festgestellt, dass dies auch in der
.live
Dokumentation erwähnt wird :quelle
bind
,live
unddelegate
Anrufeon
..live
>.on
.on
Syntax logischer, da der Listener tatsächlich an den von Ihnen bereitgestellten Selektor angehängt ist. Wenn das Ereignis ausgelöst wird, durchläuft jQuery das DOM und führt die angegebenen Handler aus (einfache Ereignisdelegierung)..live
schlug vor, dass etwas "Magisches" passiert ist, und es wurde gesagt, dass Event-Handler für "zukünftige Elemente" angehängt werden, was nicht ganz richtig war.Zusätzlich zur ausgewählten Antwort
Port
jQuery.live
auf jQuery 1.9+ , während Sie warten für Ihre Anwendung zu migrieren. Fügen Sie dies Ihrer JavaScript-Datei hinzu.Hinweis: Die obige Funktion funktioniert in jQuery v3 nicht, da sie
this.selector
entfernt wurde.Sie können auch https://github.com/jquery/jquery-migrate verwenden
quelle
Ich habe gerade eine bessere Lösung gefunden, bei der kein Code von Drittanbietern bearbeitet wird:
https://github.com/jquery/jquery-migrate/#readme
Installieren Sie das jQuery Migrate NuGet-Paket in Visual Studio, damit alle Versionsprobleme behoben werden. Wenn Microsoft das nächste Mal seine unauffälligen AJAX- und Validierungsmodule aktualisiert, versuchen Sie es möglicherweise erneut ohne das Migrationsskript, um festzustellen, ob das Problem behoben wurde.
Da jQuery Migrate von der jQuery Foundation verwaltet wird, ist dies meines Erachtens nicht nur der beste Ansatz für Bibliotheken von Drittanbietern, sondern auch, um Warnmeldungen für Ihre eigenen Bibliotheken zu erhalten, in denen detailliert beschrieben wird, wie diese aktualisiert werden.
quelle
Zusätzlich zu den ausgewählten Antworten
Wenn Sie Visual Studio verwenden , können Sie Regex Replace verwenden .
Unter Bearbeiten> Suchen und Ersetzen> In Dateien ersetzen
oder Strg + Umschalt + H.
Legen Sie im Popup-Fenster Suchen und Ersetzen diese Felder fest
Suchen nach:
\$\((.*)\)\.live\((.*),
Ersetzen durch : Aktivieren Sie
$(document.body).on($2,$1,
in den Suchoptionen "Reguläre Ausdrücke verwenden".
quelle
jquery verision xxxjs offener Editor, find
jQuery.fn.extend
Code hinzufügen
Beispiel: jquery-2.1.1.js -> Zeile 7469 (jQuery.fn.extend)
Beispielbildansicht
quelle