web-dev-qa-db-fra.com

jQuery 1.9 .live () n'est pas une fonction

J'ai récemment mis à jour jQuery de 1.8 à 2.1. J'ai soudain découvert que la .live() cessait de fonctionner.
Je reçois le message d'erreur TypeError: $(...).live is not a function.

Existe-t-il une méthode que je peux utiliser à la place de .live()?

226
ngplayground

jQuery .live() a été supprimé à partir de la version 1.9.

Cela signifie que si vous effectuez une mise à niveau à partir de la version 1.8 et antérieure, vous remarquerez des problèmes si vous ne suivez pas le guide de migration ci-dessous. Vous ne devez pas simplement remplacer .live() par .on()!


À lire avant de commencer une recherche et à remplacer:

Pour solutions rapides/rapides sur un site actif, ne remplace pas , mais remplacez simplement le mot clé live par on,
étant donné que les paramètres sont différents !

.live(events, function)

devrait mapper à:

.on(eventType, selector, function)

Le sélecteur (enfant) est très important! Si vous n'avez pas besoin de l'utiliser pour une raison quelconque, définissez-le sur null.


Exemple de migration 1:

avant:

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

ensuite, vous déplacez l'élément enfant (a) vers le sélecteur .on():

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

Exemple de migration 2:

avant:

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

ensuite, vous déplacez l'élément (.myButton) vers le sélecteur .on() et recherchez l'élément parent le plus proche (de préférence avec un ID):

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

Si vous ne savez pas quoi mettre en tant que parent, body fonctionne toujours:

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

Voir également:

482
Samuel Liew

Vous pouvez éviter de refactoriser votre code en incluant le code JavaScript suivant

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

La documentation de l'API jQuery indique que live() est obsolète à partir de la version 1.7 et supprimé à partir de la version 1.9: lien .

version obsolète: 1.7, supprimée: 1.9

En outre, il est indiqué:

Depuis jQuery 1.7, la méthode .live () est obsolète. Utilisez . On () pour attacher des gestionnaires d’événements. Les utilisateurs d'anciennes versions de jQuery doivent utiliser . Delegate () de préférence à .live ().

15
Sirko

Port de transfert de .live() pour jQuery> = 1.9 Evite de refactoriser les dépendances JS sur .live() Utilise un contexte de sélecteur DOM optimisé

/** 
 * 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

Un correctif très simple qui n'a pas besoin de changer votre code, ajoutez simplement un script de migration jquery, téléchargez-le ici https://github.com/jquery/jquery-migrate/

Il fournit jquery obsolète mais des fonctions nécessaires telles que "live", "navigateur", etc.

5
Tofeeq

.live a été supprimé de la version 1.9, veuillez consulter le guide de mise à niveau: http://jquery.com/upgrade-guide/1.9/#live-removed

5
matino

.live () est obsolète et a été supprimé de jQuery 1.9. Vous devez utiliser . on ()

4
koopajah

J'ai tendance à ne pas utiliser la syntaxe .on (), sinon nécessaire. Par exemple, vous pouvez migrer plus facilement comme ceci:

vieux:

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

nouveau:

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

Voici une liste des gestionnaires d’événements valides: https://api.jquery.com/category/forms/

2
Gerfried

Si vous utilisez le Ruby sur le gem jQuery de Rails jquery-Rails et que, pour une raison quelconque, vous ne pouvez pas refactoriser votre code hérité, la dernière version prise en charge est toujours 2.1.3 et vous pouvez le verrouiller en utilisant la syntaxe suivante sur votre Gemfile:

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

alors vous pouvez utiliser la commande suivante pour mettre à jour:

bundle update jquery-Rails

J'espère que cela aidera les autres confrontés à un problème similaire.

1
fagiani