Maison > interface Web > js tutoriel > Comment éviter les pièges de fermeture lors de la génération dynamique de gestionnaires d'événements en JavaScript ?

Comment éviter les pièges de fermeture lors de la génération dynamique de gestionnaires d'événements en JavaScript ?

Linda Hamilton
Libérer: 2024-11-29 12:34:10
original
145 Les gens l'ont consulté

How to Avoid Closure Pitfalls When Dynamically Generating Event Handlers in JavaScript?

Comment générer dynamiquement des gestionnaires d'événements à l'aide de boucles en Javascript

Dans certains scénarios, il devient nécessaire d'attribuer des gestionnaires d'événements à une série d'éléments généré dynamiquement via Javascript, souvent appelé « boucle via les gestionnaires d'événements ». Ce problème survient lorsque les éléments générés ont des fonctionnalités similaires et nécessitent des gestionnaires d'événements avec un comportement unique, par opposition à l'utilisation de gestionnaires d'événements en ligne.

Prenons l'exemple où vous avez 10 balises générées à partir d’une réponse AJAX et vous souhaitez attribuer un événement onclick à chacune d’elles dans une boucle. Le code suivant semble être une solution simple :

for (i = 1; i < 11; i++) {
  document.getElementById("b" + i).onclick = function () {
    alert(i);
  };
}
Copier après la connexion

Cependant, lors de l'exécution, ce code attribue uniquement l'événement onclick au dernier tag et affiche "11" dans la zone d'alerte pour tous les clics. La raison de ce comportement réside dans le fait que tous les gestionnaires d'événements partagent la même variable i, qui est incrémentée dans la boucle et pointe finalement vers la dernière variable tag.

Pour résoudre ce problème et garantir que chaque tag a son propre gestionnaire d'événements unique, vous devez définir une fonction distincte pour chaque gestionnaire et transmettre la valeur i en tant que paramètre. Ce faisant, chaque gestionnaire aura sa propre instance de la variable i, préservant ainsi la fonctionnalité prévue :

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

for (i = 1; i < 11; i++) {
  handleElement(i);
}
Copier après la connexion

Ce code révisé attribuera des gestionnaires d'événements onclick distincts à chaque et lorsqu'une balise est cliqué sur la balise, la valeur i correcte sera affichée dans la zone d'alerte, reflétant le comportement attendu. Cette technique vous permet de générer dynamiquement des gestionnaires d'événements pour une série d'éléments, garantissant ainsi une gestion appropriée des événements pour chaque élément individuel.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal