18910140161

JavaScript-addEventListener调用函数,我甚至没有要求它-堆栈溢出

顺晟科技

2022-10-18 14:05:36

9

所以我们有一个页面:

<代码><;span ID=' container '>;<;A href='#' ID=' first '>;第一个链接<;/A>;<;A href='#' ID=' second '>;第二个链接<;/A>;<;/span>;

并希望添加一些单击事件:

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

工作起来很有魅力!但是,当您将第二个参数作为外部函数时:

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

它会立即调用该函数。我怎样才能阻止这一切?好讨厌!

这里有一个现场演示:http://jsfiddle.net/ey7pb/1/。


顺晟科技:

或者您可以使用.bind

function message_me(m_text){
    return function () {
        alert(m_text);
    };
}

second.addEventListener('click', message_me('shazam'));

检查MDN文档关于“闭包”

使用箭头函数

现代ES6解决方案

function message_me(m_text){
    alert(m_text);
}

second.addEventListener('click', message_me.bind(this, 'shazam'));

由于第二个参数需要一个函数引用,因此需要提供一个函数引用。对于有问题的代码,您会立即调用函数并传递其结果(即function message_me(m_text){ alert(m_text) } second.addEventListener('click', message_me('shazam')) ..)。因为该函数所做的只是function message_me(m_text){ alert(m_text) } second.addEventListener('click', function() { message_me('shazam'); } ); ,不返回任何内容)。要么在匿名函数中调用该函数(如第一个示例),要么修改该函数以返回一个函数。

你可以这样做:

alert

或者这个:

function message_me(m_text){
    alert(m_text);
}

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

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

引用伊恩的回答

<块引用>

由于第二个参数需要一个函数引用,因此需要提供一个函数引用。对于有问题的代码,您会立即调用函数并传递其结果(即function message_me(m_text){ alert(m_text) } second.addEventListener('click', message_me('shazam')) ..)。因为该函数所做的只是function message_me(m_text){ alert(m_text) } second.addEventListener('click', function() { message_me('shazam'); } ); ,不返回任何内容)。要么在匿名函数中调用该函数(如第一个示例),要么修改该函数以返回一个函数。

undefined

这里有一个更新的小提琴

  • TAG:
相关文章
随机推荐
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航