Mon application a ajouté dynamiquement des Dropdowns. L'utilisateur peut en ajouter autant qu'il le souhaite.
J'utilisais traditionnellement la live()
méthode de jQuery pour détecter le moment où l'un de ces Dropdowns était change()
édité:
$('select[name^="income_type_"]').live('change', function() {
alert($(this).val());
});
Depuis jQuery 1.7, j'ai mis à jour ceci pour:
$('select[name^="income_type_"]').on('change', function() {
alert($(this).val());
});
En regardant les documents, cela devrait être parfaitement valide (non?) - mais le gestionnaire d'événements ne se déclenche jamais. Bien sûr, j'ai confirmé que jQuery 1.7 est chargé et fonctionne, etc. Il n'y a aucune erreur dans le journal des erreurs.
Qu'est-ce que je fais mal? Merci!
live
utilise en fait deon
toute façon, donc une réécriture du code hérité pourrait ne pas être nécessaire pour l'instant jusqu'à celive
qu'il soit supprimé, ce qui, je crois, est 1.9. Extrait de la source 1.7.1:live: function( types, data, fn ) {jQuery( this.context ).on( types, this.selector, data, fn ); return this;}
Donc, si l'on ne met pas à niveau une version dans laquelle il alive
disparu, une mise à jour peut ne pas être nécessaire immédiatement pour le code hérité. Pour un nouveau code, il est préférable d'utiliser à laon()
place, comme recommandé. Je pensais juste que cette information pourrait aider quelqu'un d'autre à un moment donné.live
àon
.Réponses:
La
on
documentation indique (en gras;)):Équivalent à
.live()
serait quelque chose commeBien qu'il soit préférable de lier le gestionnaire d'événements aussi près que possible des éléments, c'est-à-dire d'un élément plus proche dans la hiérarchie.
Mise à jour: En répondant à une autre question, j'ai découvert que cela est également mentionné dans la
.live
documentation :la source
bind
,live
et lesdelegate
appels verson
..live
>.on
.on
syntaxe est plus logique, car l'écouteur est en fait attaché au sélecteur que vous fournissez. Lorsque l'événement est déclenché, jQuery traverse le DOM et exécute les gestionnaires là où cela est spécifié (délégation d'événement simple)..live
a suggéré qu'il y avait quelque chose de "magique" qui s'est produit, et il a été dit d'attacher des gestionnaires d'événements pour les "éléments futurs", ce qui n'était pas entièrement vrai.En plus de la réponse sélectionnée,
Port
jQuery.live
à jQuery 1.9+ pendant que vous attendez votre application à migrer. Ajoutez ceci à votre fichier JavaScript.Remarque: La fonction ci-dessus ne fonctionnera pas à partir de jQuery v3 car elle
this.selector
est supprimée.Ou, vous pouvez utiliser https://github.com/jquery/jquery-migrate
la source
Je viens de trouver une meilleure solution qui n'implique pas la modification de code tiers:
https://github.com/jquery/jquery-migrate/#readme
Installez le package jQuery Migrate NuGet dans Visual Studio pour éliminer tous les problèmes de version. La prochaine fois que Microsoft mettra à jour leurs modules AJAX et de validation discrets, essayez-le sans le script de migration pour voir s'ils ont résolu le problème.
Comme jQuery Migrate est géré par la Fondation jQuery, je pense que ce n'est pas seulement la meilleure approche pour les bibliothèques tierces et également pour obtenir des messages d'avertissement pour vos propres bibliothèques détaillant comment les mettre à jour.
la source
En plus des réponses sélectionnées,
Si vous utilisez Visual Studio , vous pouvez utiliser le remplacement Regex .
Dans Edition> Rechercher et remplacer> Remplacer dans les fichiers
ou Ctrl + Maj + H
Dans la fenêtre contextuelle Rechercher et remplacer, définissez ces champs
Rechercher quoi:
\$\((.*)\)\.live\((.*),
Remplacer par:
$(document.body).on($2,$1,
Dans les options de recherche, cochez "Utiliser les expressions régulières"
la source
jquery verision xxxjs ouvrir l'éditeur, trouver
jQuery.fn.extend
ajouter du code
Exemple: jquery-2.1.1.js -> ligne 7469 (jQuery.fn.extend)
Exemple de vue d'images
la source