Javascript addEventListener 异常

标签 javascript addeventlistener

有人可以解释为什么这不会在点击时触发两次“listenerFn”吗

(function () {

    document.querySelector("div").addEventListener("click", listenerFn);
    document.querySelector("div").addEventListener("click", listenerFn);

    function listenerFn() {
        console.log("__testing__");
    } })();

虽然像下面这样的东西触发了预期的两倍:

(function () {

myFunction()
myFunction()

function myFunction() {
    function listenerFn() {
        console.log('My Message')
    }
    document.querySelector('div').addEventListener('click', listenerFn)
} })();

最佳答案

原因是,在第一种情况下,您尝试添加函数 listenerFn 的相同实例,而在第二种情况下,您要添加两个不同的实例(甚至 myFunction() 调用都有自己的 listnerFn() 实例。

您可以像这样更新您的第一个代码示例,它应该可以工作:

(function () {

    document.querySelector("div").addEventListener("click", getListenerFn());
    document.querySelector("div").addEventListener("click", getListenerFn());

    function getListenerFn() {
         let listenerFn = function() {
           console.log("__testing__");
        } 

       return listenerFn;
    }
  })();

关于Javascript addEventListener 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53299407/

相关文章:

javascript - :valid pseudoclass has greater priority than a custom class defined later

javascript - 如何将EventListener添加到html链接?

javascript - 将EventListener 添加到innerHTML

javascript - 如何让 KnockOutJS 识别具有数据绑定(bind)属性的动态 html?

javascript - MongoDB,将新值推送到数组而不复制键

javascript - ASP.NET 在alert() 中使用斜杠

javascript - js2 模式中的 Linting 错误似乎*不是*来自 Flycheck?

javascript - 在自动完成表单上输入 onkeydown 功能

javascript - 如何访问事件监听器内的类函数

JavaScript 和 HTML : Event Listener Is Not Producing Text Alert As Expected; ReferenceError: button is not defined