所以我们有一个页面:
<span id='container'>
<a href='#' id='first'>First Link</a>
<a href='#' id='second'>Second Link</a>
</span>
并想添加一些点击事件:
first.addEventListener('click', function(){alert('sup!');})
像魅力一样!但是,当您将第二个参数设为外部函数时:
function message_me(m_text){
alert(m_text)
}
second.addEventListener('click', message_me('shazam'))
立即调用该函数。我怎么能阻止这个?太烦人了!
这是一个现场演示:http://jsfiddle.net/ey7pB/1/
答案 0 :(得分:15)
function message_me(m_text){
alert(m_text)
}
second.addEventListener('click',
function() {
message_me('shazam');
}
);
这是一个更新的fiddle。
答案 1 :(得分:12)
由于第二个参数需要函数引用,因此您需要提供一个。对于有问题的代码,您立即调用该函数并传递其结果(undefined
...因为所有函数都是alert
并且不返回任何东西)。在匿名函数中调用函数(如第一个示例)或更改函数以返回函数。
你可以这样做:
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'));
答案 2 :(得分:8)
或者您可以使用.bind
function message_me(m_text){
alert(m_text);
}
second.addEventListener('click', message_me.bind(this, 'shazam'));
检查MDN Documentation 关于&#39;关闭&#39;
答案 3 :(得分:1)
使用箭头功能的现代ES6解决方案
second.addEventListener('click', () => message_me('shazam'))