Maison > interface Web > js tutoriel > Pourquoi « addEventListener » appelle-t-il ma fonction immédiatement plutôt que lors du déclenchement d'un événement ?

Pourquoi « addEventListener » appelle-t-il ma fonction immédiatement plutôt que lors du déclenchement d'un événement ?

Linda Hamilton
Libérer: 2024-12-13 15:16:10
original
583 Les gens l'ont consulté

Why Does `addEventListener` Call My Function Immediately Instead of on Event Trigger?

"addEventListener appelle la fonction sans invite" expliqué

Lorsque nous attachons un écouteur d'événement à un élément, nous voulons que la fonction s'exécute uniquement lorsque l'événement se produit. Mais dans certains cas, il peut être difficile de garantir que la fonction n'est pas appelée prématurément.

Considérez le code HTML suivant :

<span>
Copier après la connexion

Nous souhaitons ajouter un événement de clic au deuxième lien :

second.addEventListener('click', message_me('shazam'));
Copier après la connexion

où 'message_me' est une fonction externe qui affiche un message. Étonnamment, ce code déclenche la fonction 'message_me' immédiatement, avant même de cliquer sur le deuxième lien.

Le problème

Le problème réside dans la façon dont JavaScript gère les références de fonction comme deuxième argument de 'addEventListener'. JavaScript attend une référence à une fonction, mais dans le code problématique, la fonction 'message_me('shazam')' est invoquée immédiatement et son résultat est transmis à la place.

La solution

Il existe deux façons de résoudre ce problème :

  • Créer un compte anonyme function : Enveloppez 'message_me' dans une fonction anonyme pour renvoyer une référence de fonction :
second.addEventListener('click', function() {
    message_me('shazam');
});
Copier après la connexion

Cette solution garantit que 'message_me' est appelé uniquement lorsque le deuxième lien est cliqué.

  • Renvoyer une fonction depuis 'message_me' : Modifier 'message_me' pour renvoyer une référence de fonction :
function message_me(m_text) {
    return function() {
        alert(m_text);
    };
}

second.addEventListener('click', message_me('shazam'));
Copier après la connexion

Dans ce cas, 'addEventListener' reçoit une référence à une fonction qui sera exécutée lorsque l'événement click se produit.

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