Utilisation de .each sur des objects dynamics dans jQuery?

Il y a beaucoup de questions qui semblent poser cette question, mais à la fin, tout ce qu’elles veulent, c’est attacher des événements .click et non pas chacun. La réponse généralement acceptée inclut donc $("body").on("click", ".selector", function(){}); et ce n’est certainement pas ce que je veux.

J’ai quelques entrées générées et je dois changer la valeur de chacune en même temps. Normalement, je voudrais $(".inputs").each(function(){$(this).val("new-value")}; ou quelque chose du $(".inputs").each(function(){$(this).val("new-value")}; , mais je ne peux pas à cause de l’aspect dynamic.

Alors, comment feriez-vous un $("body").on("each", ".inputs", function(){}); ?

En fait, c’est aussi simple que d’exécuter le fichier .each dans setTimout.

 setTimeout(function(){ $(".inputs").each(function(){$(this).val("new-value")}); }, 5000); 

$.each fonctionne avec tous les nouveaux éléments ajoutés.

http://jsfiddle.net/4SV7n/

Faire quelque chose de différent à chaque fois:

http://jsfiddle.net/4SV7n/1/

Vous pouvez utiliser $(".inputs").each(function(){$(this).val("new-value")}; parfaitement sur les éléments dynamics. Il vous suffit de réexécuter le script après avoir ajouté un élément dynamicment.

D’après les commentaires, j’ai pensé qu’il existait un malentendu à propos de «chacun». ‘Each’ n’est pas un événement et aucun événement n’est déclenché si ‘each’ est appelé. Si vous voulez garder une trace des éléments ajoutés parce que vous n’avez aucun contrôle sur leur ajout, vous aurez besoin d’une timer:

 setInterval(function(){ $(".inputs").each(function(){$(this).val("new-value")}; },500); 

Voici un script bien meilleur qui fait exactement ce que le PO a demandé.

 function doWithInput(i, e){ $(e).val("done with each"); } $(document).ready(function(){ $("#button").click(function(){ $("#inputs").append("
"); }); $(".inputs").each(doWithInput); }); $(document).on("DOMNodeInserted", ".inputs_new", function(e) { $(e.target).removeClass('inputs_new').addClass('inputs'); doWithInput(0, e.target); });