Heim  >  Fragen und Antworten  >  Hauptteil

Titelumschreibung: Die Funktion wird von addEventListener ohne meine explizite Anfrage aufgerufen

Also haben wir eine Seite:

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

Und ich möchte einige Klickereignisse hinzufügen:

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

Funktioniert wie ein Zauber! Aber wenn Sie das zweite Argument auf eine externe Funktion setzen:

function message_me(m_text){
    alert(m_text)
}

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

Es ruft die Funktion sofort auf. Wie kann ich das stoppen? So nervig!

Dies ist eine Live-Demo: http://jsfiddle.net/ey7pB/1/

P粉477369269P粉477369269346 Tage vor515

Antworte allen(2)Ich werde antworten

  • P粉258083432

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

    由于第二个参数需要一个函数引用,因此您需要提供一个。对于有问题的代码,您将立即调用该函数并传递其结果(这是未定义...因为该函数所做的只是警报 并且不返回任何内容)。要么在匿名函数中调用该函数(如您的第一个示例),要么更改该函数以返回一个函数。

    你可以这样做:

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

    或者这个:

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

    演示: http://jsfiddle.net/tcCvw/

    Antwort
    0
  • P粉773659687

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

    引用伊恩的答案

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

    这是更新的fiddle

    Antwort
    0
  • StornierenAntwort