Heim > Fragen und Antworten > Hauptteil
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粉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/ p>
P粉7736596872023-10-19 12:06:48
引用伊恩的答案:
function message_me(m_text){ alert(m_text) } second.addEventListener('click', function() { message_me('shazam'); } );
这是更新的fiddle。