11329 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
Je crée une suite de "div" (environ une dizaine) avec jquery. Chaque "div" est cliquable avec un message d'alerte.
Le code (simplifié épuré avec seulement 2 'div' pour ce post):
jQuery(document).ready(function($) {
	var urls = [
				'https://google.com',
				'https://www.alsacreations.com',
				];
	var div = [];
	for (var i=0; i< urls.length; i++) {
		div[i] = $('<div id="div'+i+'">').addClass("essai").text(urls[i]).appendTo("body");
		div[i].mouseover(function(){$(this).css('cursor','pointer')});
		lien = urls[i];
		alert('creation listner : '+lien); //alerte bien avec urls[i]
		div[i].click(function(){ alert('click : '+lien)});//alerte asystématiquement avec le dernier des urls[i]
	}//fin boucle for
});//fin jQuery(document)


Problème: Quelque soit la "div" que l'on clique, l'alerte envoie toujours le même message, celui de la dernière "div" de la liste
ex ci-dessus: si on clique sur la 1ere "div" on a l'alerte 'https://www.alsacreations.com' au lieu de "google.com".)
Le sélecteur change pourtant à chaque itération de la boucle "for"
Une "malfaçon" dans mon code? La méthode n'est pas la bonne?
Merci d'avance pour votre aide
Modifié par gilbertdelyon (13 Dec 2020 - 09:14)
Bonjour,
Bienvenue sur le forum @gilbertdelyon !
Alors, le problème, c'est que lorsque tu cliques, la boucle for c'est terminée (et le i est donc à urls.length, donc au dernier).
Il faut donc remplacer

div[i].click(function(){alert('click : '+lien)});//alerte asystématiquement avec le dernier des urls[i]
}//fin boucle for
par

} //fin boucle for
$(".essai").click(function(){ alert('click : '+$(this).text())});

Voici ta correction : https://jsfiddle.net/exercices/hygxmbco/2/.
--------------------------------------------------------------------------------------------------
Quand vous avez trouvé votre réponse, cochez "Résolu" et indiquez la meilleure solution.
Modifié par js_html (13 Dec 2020 - 11:16)
@js_html,
Oui, c'est bien ça, j'avais trouvé aussi la solution entre temps et je m'apprêtais justement à poster le code qui marche. Mais le tiens est encore plus simple.
Bon dimanche
Modifié par gilbertdelyon (13 Dec 2020 - 11:58)