【发布时间】:2022-01-14 03:40:32
【问题描述】:
我已经在 SO 上看到了这个问题:JavaScript: remove event listener
我明白它的作用。但我不知道为什么 addEventListener 有时会累积超时而其他时候不会。
我从玩弄我的代码的理解是,只有当 addEventListeners 嵌套在另一个 addEventListener 中时才会发生累积?有人可以解释为什么会这样吗?
在我上面的演示中,我只有一个带有按钮的 div。我已将 addEventListener 添加到 div 和按钮。单击按钮时,会弹出警报。
<div id='clickBox'>
<button id='button'>Click Me</button>
</div>
Javascript
document.getElementById('clickBox').addEventListener('click', function () {
alert('hello');
document.getElementById('button').addEventListener('click', function () {
alert('accumulates per click');
});
});
结果是
- 第一次点击:alert('hello'),alert('accumulates per click'),
- 第二次点击:alert('hello'), alert('累计每 click'),alert('每次点击累积')
等等。奇怪的是 alert('hello') 也不会累积。
【问题讨论】:
-
你能解释一下-1吗?如果您无缘无故地投反对票,这将无济于事
-
如果没有代码需要审查,您的问题很难回答。所以,我们不知道我们看不到的事情是如何发生的。
-
哦,好吧,我很抱歉。我认为这是一个常见的问题,背后有一个解释。希望当我发布一个 JSfiddle 时,它不会只是我犯的一个愚蠢的错误。
-
因为您在每次点击点击框时都绑定了另一个事件处理程序,并且还执行了之前绑定的侦听器函数。
-
啊,好的,我明白了。我在另一个侦听器上添加了一个侦听器,因此它会累积超时,所以这就是我将使用 removeEventListener 的地方。谢谢
标签: javascript events