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

j'ai récemment mis à jour jQuery à partir de 1,8 à 2,1. J'ai soudain découvert que le .live() ne fonctionnait plus.

J'ai l'erreur TypeError: $(...).live is not a function .

y a-t-il une méthode que je puisse utiliser à la place de .live() ?

209
demandé sur Samuel Liew 2013-01-16 12:26:03

9 réponses

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

cela signifie que si vous mettez à jour à partir de la version 1.8, 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 quick / hot fixes sur un site en direct, ne pas il suffit de remplacer le mot-clé live par on ,

comme les paramètres sont différents !

.live(events, function)

devrait correspondre à:

.on(eventType, selector, function)

le sélecteur (enfant) est très important! Si vous n'avez pas besoin d'utiliser cela pour n'importe quelle raison, mettez-le à null .


Exemple De Migration 1:

avant:

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

après, 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)

après, vous déplacez l'élément ( .myButton ) vers le sélecteur .on() , et vous trouvez 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 comme parent, body fonctionne toujours:

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

Voir aussi:

456
répondu Samuel Liew 2018-01-18 22:46:06

vous pouvez éviter de reconfigurer 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;
    }
});
43
répondu Liran BarNiv 2018-06-25 16:49:31

la documentation de L'API jQuery liste live() comme dépréciée à partir de la version 1.7 et supprimée à partir de la version 1.9: lien .

version dépréciée: 1.7, supprimé: 1.9

en outre, il stipule:

de jQuery 1.7, l' .la méthode live () est dépréciée. Utilisez .sur() pour attacher des gestionnaires d'événements. Utilisateurs des anciennes versions de jQuery doit utiliser .délégué() de préférence .live ()

14
répondu Sirko 2013-01-16 08:27:15

avant-port de .live() pour jQuery > = 1,9 Évite de refactoriser les dépendances de JS sur .live() Utilise le 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);
          }
      }
  });
}
12
répondu David Thomas 2015-08-05 08:13:48

.live a été supprimé en 1.9, veuillez voir le guide de mise à jour: http://jquery.com/upgrade-guide/1.9/#live-removed

5
répondu matino 2013-01-16 08:27:29

une solution très simple qui n'a pas besoin de changer votre code, il suffit d'ajouter jQuery migration script, télécharger ici https://github.com/jquery/jquery-migrate/

Il fournit jquery obsolète, mais les fonctions nécessaires comme "vivre", "navigateur" etc

5
répondu Tofeeq 2015-05-07 07:20:29

.live() a été déprécié et a été supprimé de jQuery 1.9 Vous devez utiliser .on ()

4
répondu koopajah 2013-01-16 08:27:22

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

:

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

nouveau:

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

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

2
répondu Gerfried 2017-04-08 17:25:00

si vous utilisez le jquery gem jquery-rails de Ruby on Rails et que, pour une raison quelconque, vous ne pouvez pas modifier votre code d'héritage, la dernière version qui est toujours supportée est 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 à une question similaire.

1
répondu fagiani 2017-07-05 19:47:16