Bonjour, je cherche à écouter les évents de tous les articles d'une liste pour si clic affiché les commentaires liés a l'article, mais j'arrive à écouter que le dernier élément.
A voir ton code, j'ai l'impression que tu mélanges les variables "i" et "x". Manifestement, "i" semble représenter la taille de la NodeList et "x" te permet d'itérer dessus. Mais à l'intérieur de la fonction du "addEventListener", tu cherches à utiliser "i" pour afficher l'élément cliqué 🤔
Après ça, ton problème est un grand classique de JS : la fonction du "addEventListener" utilise la variable globale "x" déclarée dans la boucle for().
Cela veut dire par exemple que si le 3e élément de ta NodeList est cliqué, la fonction va bel et bien se déclencher, mais elle va utiliser en interne la valeur de "x" qui a déjà été modifiée par la boucle for() lors de l'exécution du programme. C'est pour ça que cela ne fonctionne que sur le dernier élément : cela correspond à la valeur finale de "x" après que la boucle for() soit terminée.
La façon la plus simple de régler ce problème est de faire une "closure" pour chaque tour de boucle, et en JS moderne, c'est très simple : utilise un "let" :
initRestaurantsJSON(function() {
const nodeList = document.getElementsByClassName('article');
console.log(nodeList);
var i = nodeList.length - 1;
for (let x = 0; x < i; x++) {
nodeList[x].addEventListener('click', function(event) {
console.log('click sur article : ' + x);
document.getElementsByClassName('article-' + x);
event.preventDefault();
})
}
});
- Edité par ninjavascript 14 octobre 2020 à 17:06:37
La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]