207 votes

Transformer live() on() dans jQuery

Ma demande a ajouté dynamiquement des listes déroulantes. L'utilisateur peut en ajouter autant qu'ils le besoin.

J'ai été traditionnellement à l'aide de jQuery live() méthode pour détecter le moment où l'une de ces listes déroulantes a été change()ed:

$('select[name^="income_type_"]').live('change', function() {
    alert($(this).val());
});

Comme de jQuery 1.7, j'ai mis à jour ce:

$('select[name^="income_type_"]').on('change', function() {
    alert($(this).val());
});

En regardant la doc, qui doit être parfaitement valide (à droite?) - mais le gestionnaire d'événement se déclenche jamais. Bien sûr, j'ai confirmé jQuery 1.7 est chargé et en cours d'exécution, etc. Il n'y a pas d'erreurs dans le journal des erreurs.

Ce que je fais mal? Merci!

249voto

Felix Kling Points 247451

L' on documentation unis (en gras ;)):

Les gestionnaires d'événements sont liés uniquement pour les éléments sélectionnés; ils doivent exister sur la page au moment de votre code fait l'appel .on().

Équivalent à .live() serait quelque chose comme

$(document.body).on('change', 'select[name^="income_type_"]', function() {
    alert($(this).val());
});

Même s'il est préférable si vous liez le gestionnaire d'événements aussi près que possible les éléments, c'est, à un élément de la plus proche dans la hiérarchie.

Mise à jour: bien que répondant à une autre question, j'ai trouvé que cela est également mentionné dans l' .live documentation:

La réécriture de l' .live() méthode en termes de ses successeurs est simple; ce sont des modèles pour les appels équivalents pour les trois cas les méthodes d'attache:

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+

26voto

Vikrant Chaudhary Points 4306

En plus de la réponse choisie,

Port `` à jQuery 1.9 + pendant que vous attendez pour votre application à migrer. Ajouter ceci à votre fichier JavaScript.

Vous pouvez aussi utiliser https://github.com/jquery/jquery-migrate

7voto

Code Chief Points 422

Viens de trouver une meilleure solution qui n'implique pas de modification de la troisième partie du code:

https://github.com/jquery/jquery-migrate/#readme

Installer le jQuery Migrate package NuGet dans Visual Studio pour faire de tous les problèmes de gestion des versions de s'en aller. La prochaine fois, Microsoft mise à jour de leur discrète AJAX et de validation des modules peut-être l'essayer sans migrer script à nouveau pour voir si ils ont résolu le problème.

Comme jQuery Migrate est maintenu par la Fondation jQuery je pense que ce n'est pas seulement la meilleure approche pour les bibliothèques tierces et aussi pour obtenir des messages d'avertissement pour votre propre bibliothèques détaillant la façon de les mettre à jour.

4voto

Maykol Rypka Points 31

Outre les réponses sélectionnées,

Si vous utilisez Visual Studio, vous pouvez utiliser la Regex remplacer.
Dans Edition > Rechercher et remplacer > remplacer dans les fichiers
Ou Ctrl + Maj + H

Dans Rechercher et remplacer pop-up, définir ces champs

Rechercher : **Remplacer par :**
Dans trouver options cocher « Utiliser les Expressions régulières »

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X