Maison  >  Questions et réponses  >  le corps du texte

Réécriture du titre : la fonction est appelée par addEventListener sans ma demande explicite

Nous avons donc une page :

<span id='container'>
    <a href='#' id='first'>First Link</a>
    <a href='#' id='second'>Second Link</a>
</span>

Et je souhaite ajouter des événements de clic :

first.addEventLis tener('click', function(){alert('sup!');})

Fonctionne à merveille ! Mais lorsque vous définissez le deuxième argument sur une fonction externe :

function message_me(m_text){
    alert(m_text)
}

second.addEventLis tener('click', message_me('shazam'))

Il appelle la fonction immédiatement. Comment puis-je arrêter cela ? Si ennuyant!

Ceci est une démo en direct : http://jsfiddle.net/ey7pB/1/

P粉477369269P粉477369269346 Il y a quelques jours516

répondre à tous(2)je répondrai

  • P粉258083432

    P粉2580834322023-10-19 17:48:17

    Étant donné que le deuxième argument nécessite une fonction référence , vous devez en fournir une. Avec le code en question, vous appelleriez immédiatement la fonction et lui transmettriez son résultat (qui est 未定义... car tout ce que la fonction fait est alerte et ne renvoie rien). Appelez la fonction dans une fonction anonyme (comme votre premier exemple) ou modifiez la fonction pour renvoyer une fonction.

    Vous pouvez faire ceci :

    function message_me(m_text){
        alert(m_text);
    }
    
    second.addEventListener('click', function () {
        message_me('shazam')
    });

    Ou ceci :

    function message_me(m_text){
        return function () {
            alert(m_text);
        };
    }
    
    second.addEventListener('click', message_me('shazam'));

    Démo : http://jsfiddle.net/tcCvw/

    répondre
    0
  • P粉773659687

    P粉7736596872023-10-19 12:06:48

    Citant la réponse de Ian :

    function message_me(m_text){
        alert(m_text)
    } 
    
    second.addEventListener('click', 
        function() {
            message_me('shazam');
        }
    );

    Ceci est un violon mis à jour.

    répondre
    0
  • Annulerrépondre