Maison >interface Web >js tutoriel >Comment attribuer correctement des gestionnaires d'événements aux éléments générés dynamiquement en JavaScript à l'aide de boucles ?

Comment attribuer correctement des gestionnaires d'événements aux éléments générés dynamiquement en JavaScript à l'aide de boucles ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-05 00:12:12922parcourir

How to Properly Assign Event Handlers to Dynamically Generated Elements in JavaScript Using Loops?

Génération de gestionnaires d'événements avec des boucles en Javascript

Lorsque vous travaillez avec des pages Web dynamiques, il devient souvent nécessaire d'attribuer des gestionnaires d'événements à plusieurs éléments qui sont générés par programme. Ceci peut être réalisé grâce à l'utilisation de boucles, garantissant une gestion efficace et centralisée.

Un scénario courant consiste à générer plusieurs balises d'ancrage (a) à partir d'une réponse AJAX, où chaque balise nécessite un événement onclick qui alerte un numéro correspondant. . Cependant, une approche de boucle naïve comme celle-ci peut ne pas fonctionner comme prévu :

for (i = 1; i < 11; i++) {
  document.getElementById("b" + i).onclick = function() {
    alert(i);
  };
}

Dans cet exemple, tous les gestionnaires d'événements partagent la même variable i, ce qui entraîne le dernier gestionnaire à écraser les précédents et à alerter " 11" quelle que soit la balise sur laquelle vous avez cliqué.

Pour résoudre ce problème, il est crucial de créer une fermeture pour chaque gestionnaire, en passant i comme paramètre. Cela garantit que chaque fonction a sa propre valeur i unique :

function handleElement(i) {
  document.getElementById("b" + i).onclick = function() {
    alert(i);
  };
}

for (i = 1; i < 11; i++) {
  handleElement(i);
}

Avec l'utilisation de la fonction handleElement, chaque gestionnaire d'événements se voit attribuer un i unique, permettant d'afficher le message d'alerte correct lorsque l'ancre correspondante la balise est cliquée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn