Maison > interface Web > js tutoriel > Pourquoi `classname.addEventListener(\'click\', myFunction(), false);` ne fonctionne-t-il pas pour ajouter des écouteurs d'événements aux classes ?

Pourquoi `classname.addEventListener(\'click\', myFunction(), false);` ne fonctionne-t-il pas pour ajouter des écouteurs d'événements aux classes ?

Patricia Arquette
Libérer: 2024-12-07 03:17:10
original
559 Les gens l'ont consulté

Why Doesn't `classname.addEventListener('click', myFunction(), false);` Work for Adding Event Listeners to Classes?

Écouteur d'événements pour la classe : un guide pratique

Dans le but de capturer les valeurs des attributs de classe lors des clics, vous avez peut-être rencontré un problème avec votre code JavaScript. Plus précisément, la ligne classname.addEventListener('click', myFunction(), false); ne parvient pas à enregistrer les écouteurs d'événements sur les éléments.

Pour résoudre ce problème, analysons le code étape par étape :

  1. getElementsByClassName : Cette méthode sélectionne correctement les éléments avec le nom de classe spécifié. Cependant, elle ne renvoie pas un tableau mais un objet de type Array appelé HTMLCollection.
  2. addEventListener : Cette méthode prend trois paramètres : (a) le type d'événement (dans ce cas, 'cliquez' ), (b) fonction d'écoute d'événements et (c) phase de capture (généralement fausse pour les événements bouillonnants). Dans le code, myFunction() est exécuté immédiatement lorsque la méthode addEventListener est invoquée, transmettant le résultat de l'appel de fonction en tant qu'écouteur d'événement. C'est incorrect.
  3. La fonction : La fonction anonyme myFunction récupère l'attribut "data-myattribute" et l'affiche dans une boîte d'alerte. Cette partie du code est correcte.

Code corrigé :

Pour résoudre le problème, nous devons attacher correctement les écouteurs d'événement à chaque élément renvoyé par getElementsByClassName . Voici le code corrigé :

var elements = document.getElementsByClassName("classname");

var myFunction = function() {
    var attribute = this.getAttribute("data-myattribute");
    alert(attribute);
};

for (var i = 0; i < elements.length; i++) {
    elements[i].addEventListener('click', myFunction, false);
}
Copier après la connexion

Explication de la correction :

  1. Objet de type tableau : Nous stockons la HTMLCollection dans le éléments variables pour une meilleure utilisation.
  2. Boucle : Pour attacher écouteurs à chaque élément, nous parcourons les éléments Objet de type tableau à l'aide d'une boucle.
  3. EventListener : La syntaxe correcte pour ajouter un écouteur d'événement est utilisée, en passant myFunction comme écouteur.

Dans ES6, l'ajout de boucles et d'écouteurs d'événements peut être réalisé davantage de manière concise :

Array.from(elements).forEach(function(element) {
  element.addEventListener('click', myFunction);
});
Copier après la connexion

Pour les navigateurs plus anciens, comme IE6-8, pensez à vérifier l'existence de getElementsByClassName avant de l'utiliser.

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