猿问
下载APP

addEventListener在没有我甚至要求的情况下调用该函数

addEventListener在没有我甚至要求的情况下调用该函数

所以我们有一个页面:

<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/


炎炎设计
浏览 78回答 3
3回答

慕神8447489

function&nbsp;message_me(m_text){ &nbsp;&nbsp;&nbsp;&nbsp;alert(m_text)}&nbsp;second.addEventListener('click',&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message_me('shazam'); &nbsp;&nbsp;&nbsp;&nbsp;});这是一个更新的小提琴。

慕的地2183247

由于第二个参数需要函数引用,因此需要提供一个参数。使用有问题的代码,您将立即调用该函数并传递其结果(这是undefined因为所有函数都是alert并且不返回任何内容)。在匿名函数中调用函数(如第一个示例)或更改函数以返回函数。你可以这样做:function&nbsp;message_me(m_text){ &nbsp;&nbsp;&nbsp;&nbsp;alert(m_text);}second.addEventListener('click',&nbsp;function&nbsp;()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;message_me('shazam')});或这个:function&nbsp;message_me(m_text){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function&nbsp;()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(m_text); &nbsp;&nbsp;&nbsp;&nbsp;};}second.addEventListener('click',&nbsp;message_me('shazam'));演示:&nbsp;http&nbsp;://jsfiddle.net/tcCvw/

牛魔王的故事

或者你可以使用.bindfunction&nbsp;message_me(m_text){ &nbsp;&nbsp;&nbsp;&nbsp;alert(m_text);}second.addEventListener('click',&nbsp;message_me.bind(this,&nbsp;'shazam'));查看&nbsp;关于'闭包'的MDN文档
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答