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()
?
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:
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;
}
});
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 ()
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);
}
}
});
}
.live a été supprimé en 1.9, veuillez voir le guide de mise à jour: http://jquery.com/upgrade-guide/1.9/#live-removed
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
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/
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.