it-swarm.com.de

jQuery 1.9 .live () ist keine Funktion

Ich habe kürzlich jQuery von 1.8 auf 2.1 aktualisiert. Ich entdeckte plötzlich, dass die .live() nicht mehr funktioniert.
Ich erhalte den Fehler TypeError: $(...).live is not a function.

Gibt es eine Methode, die ich anstelle von .live() verwenden kann?

226
ngplayground

jQuery .live() wurde ab Version 1.9 entfernt.

Wenn Sie also ein Upgrade von Version 1.8 oder früher durchführen, werden Sie feststellen, dass Probleme auftreten, wenn Sie die folgenden Migrationsanweisungen nicht befolgen. Sie dürfen .live() nicht einfach durch .on() ersetzen!


Lesen Sie, bevor Sie mit dem Suchen und Ersetzen beginnen:

Ersetzen Sie für Schnell-/Hotfixes auf einer Live-Site nicht nur das Schlüsselwort live mit on,
da die Parameter unterschiedlich sind !

.live(events, function)

sollte abbilden auf:

.on(eventType, selector, function)

Der (Kinder-) Selektor ist sehr wichtig! Wenn Sie dies aus irgendeinem Grund nicht benötigen, setzen Sie es auf null.


Migrationsbeispiel 1:

vor:

$('#mainmenu a').live('click', function)

anschließend verschieben Sie das untergeordnete Element (a) in den Selektor .on():

$('#mainmenu').on('click', 'a', function)

Migrationsbeispiel 2:

vor:

$('.myButton').live('click', function)

anschließend verschieben Sie das Element (.myButton) in den Selektor .on() und suchen das nächste übergeordnete Element (vorzugsweise mit einer ID):

$('#parentElement').on('click', '.myButton', function)

Wenn Sie nicht wissen, was Sie als übergeordnetes Element angeben sollen, funktioniert body immer:

$('body').on('click', '.myButton', function)

Siehe auch:

482
Samuel Liew

Sie können das Umgestalten Ihres Codes vermeiden, indem Sie den folgenden JavaScript-Code einfügen

jQuery.fn.extend({
    live: function (event, callback) {
       if (this.selector) {
            jQuery(document).on(event, this.selector, callback);
        }
        return this;
    }
});
51
Liran Barniv

In der jQuery-API-Dokumentation ist live() ab Version 1.7 veraltet und ab Version 1.9 entfernt: link .

version veraltet: 1.7, entfernt: 1.9

Außerdem heißt es:

Ab jQuery 1.7 ist die Methode .live () veraltet. Verwenden Sie . On () , um Ereignishandler anzuhängen. Benutzer älterer jQuery-Versionen sollten . Delegate () anstelle von .live () verwenden.

15
Sirko

Forward-Port von .live() für jQuery> = 1.9 Vermeidet das Umgestalten von JS-Abhängigkeiten von .live() Verwendet den optimierten DOM-Auswahlkontext

/** 
 * Forward port jQuery.live()
 * Wrapper for newer jQuery.on()
 * Uses optimized selector context 
 * Only add if live() not already existing.
*/
if (typeof jQuery.fn.live == 'undefined' || !(jQuery.isFunction(jQuery.fn.live))) {
  jQuery.fn.extend({
      live: function (event, callback) {
         if (this.selector) {
              jQuery(document).on(event, this.selector, callback);
          }
      }
  });
}
14
David Thomas

Eine sehr einfache Lösung, die keine Änderung Ihres Codes erfordert. Fügen Sie einfach ein JQuery-Migrationsskript hinzu. Laden Sie es hier herunter https://github.com/jquery/jquery-migrate/

Es liefert veraltete aber benötigte Funktionen wie "live", "browser" etc

5
Tofeeq

.live wurde in 1.9 entfernt, siehe Upgrade-Anleitung: http://jquery.com/upgrade-guide/1.9/#live-removed

5
matino

.live () war veraltet und wurde nun aus jQuery 1.9 entfernt. Sie sollten . on () verwenden

4
koopajah

Ich neige dazu, die .on () -Syntax nicht zu verwenden, wenn dies nicht erforderlich ist. Zum Beispiel können Sie einfacher wie folgt migrieren:

alt:

$('.myButton').live('click', function);

neu:

$('.myButton').click(function)

Hier ist eine Liste der gültigen Ereignishandler: https://api.jquery.com/category/forms/

2
Gerfried

Wenn Sie das jQuery-Juwel Ruby in Rails jquery-Rails verwenden und aus irgendeinem Grund Ihren Legacy-Code nicht überarbeiten können, ist die letzte unterstützte Version 2.1.3 und Sie können es sperren, indem Sie die folgende Syntax für Ihr Gemfile verwenden:

gem 'jquery-Rails', '~> 2.1', '= 2.1.3'

dann können Sie den folgenden Befehl zum Aktualisieren verwenden:

bundle update jquery-Rails

Ich hoffe, dass wir anderen helfen können, die sich einem ähnlichen Problem gegenübersehen.

1
fagiani