jQuery / javaScript – l’écouteur d’événements click / onclick ne fonctionne pas dans la boucle malgré la fermeture

Mes boucles et moi à nouveau … J’essaie d’exécuter une boucle for sur plusieurs div , chacune étant dans la classe ” tooltipBox ” mais avec des id différents. Dans chacun de ces div s est un champ de texte d’entrée avec la classe ” tttFalloutOrder “. Ce que je veux faire dans la boucle for est de joindre un écouteur click-event sur chaque .tttFalloutOrder saisie .tttFalloutOrder .

C’est mon code jusqu’à présent:

 function installListener(elementId) { $( "div#" + elementId + " > .tttFalloutOrder" ).on("click", function() { alert("clicked on " + elementId); }); } function runSimulation() { alert("running simulation..."); $( "#lContent h2" ).html("Simulation in progress..."); var agents = $( "div.tooltipBox" ); var rFOs = $( ".rFO" ); var i, j = 0; for(i = 0, j = 0; i < agents.length, j  .tttFalloutOrder" ).on("change keypress paste focus textInput input", function() { alert(agentId + "just got changed!"); }); */ setTimeout(function() { $("div#" + agentId + " > div.offlineCover").fadeIn(500); }, ttl*1000); })(i, ttl); } } $( "#lContent h2" ).html("Simulation complete"); } 

Comme vous pouvez le constater, j’utilise une fermeture et j’ai même délégué la tâche réelle consistant à attacher l’auditeur à une autre fonction, après avoir lu plusieurs réponses à la SO relatives aux auditeurs d’événements en boucle que cela aiderait … bien que honnêtement je ne le fasse pas. Je ne vois vraiment pas en quoi cela ferait une différence. Quoi qu’il en soit, les écouteurs de clic ne déclenchent toujours pas et, franchement, je ne comprends pas ce qui se passe – ou plutôt ce qui ne se passe pas – ici.

Merci d’avance – vous, chez SO, avez toujours trouvé le moyen de diriger les âmes inconnues comme moi dans la bonne direction, et j’apprécie vraiment cela.

Mise à jour Le cas est clos à cause de ma propre stupidité … Tout d’abord, un membre indéfini était assis dans ma fonction installListener() . Deuxièmement, le sélecteur jQuery $( "div#" + elementId + " > .tttFalloutOrder" ) retourné undefined, car l’opérateur > sélectionne le deuxième élément, qui a le premier élément comme parent direct. Cependant, puisque .tttFalloutOrder est un champ de saisie situé dans une

, ce n’est pas le cas …

J’ai maintenant installListener() la fonction installListener() et résolu le problème avec le code suivant:

 function runSimulation() { alert("running simulation..."); $( "#lContent h2" ).html("Simulation in progress..."); var agents = $( "div.tooltipBox" ); var rFOs = $( ".rFO" ); var waitUntilEvaluate = 0; var i, j = 0; for(i = 0, j = 0; i < agents.length, j  div.offlineCover").fadeIn(500); }, ttl*1000); waitUntilEvaluate = waitUntilEvaluate + ttl * 1000; })(i, ttl); } } console.log(waitUntilEvaluate); setTimeout(function() { $( "#lContent h2" ).html("Simulation complete"); evaluate(); }, waitUntilEvaluate); }