【发布时间】:2016-05-03 00:54:44
【问题描述】:
我在 HTML 元素上有带有 addEventListener #1 的函数 A。它做一些工作并执行一些功能。在代码中还有其他带有addEventListener #2 的B 函数,它可以完成其他一些工作。
两个EventListeners 都处于change“模式”。
它可以工作,但我注意到当我执行函数 A 时,它可以正常工作并再次执行 B 函数,它是addEventListener #2强>。那么我有两个(或更多 - 取决于我使用 #1 监听器的次数)#2 EventListeners(在 B函数)。
JavaScriptCode(简体):
var a = document.getElementById('firstSelect'),
b = document.getElementById('secondSelect');
(function()
{
function parent()
{
a.addEventListener('change', function(ev)
{
alert(ev.target.innerHTML);
kid();
}, false);
};
parent();
function kid()
{
b.addEventListener('change', function(ev)
{
alert(ev.target.innerHTML);
}, false);
}
}());
JSFIDDLE:https://jsfiddle.net/Chriss92/u4yrypug/
在 Chrome 中它看起来像这样 - 当点击(使用)#1 EventListener 不止一次时,它会添加一个 #2 EventListener,那么当我使用 #2 它多次执行它的代码(因为它被创建或添加了很多次):
第一次使用#1EventListener
第二次使用#1EventListener
...当我在 #1 EventListener 上点击五次时,它会添加五个 #2 EventListeners:
以此类推,更多次点击#1EventListener,更多#2EventListener被添加。
我的问题是:如何重用EventListener而不是添加它,当它已经创建时?我想要干净的 JavaScript 解决方案,而不是 jQuery。
【问题讨论】:
-
有点混乱。还要添加代码如何分配事件监听器
-
查看如何移除事件监听器。正如您可以添加事件侦听器一样,您也可以将它们从 DOM 元素中移除。所以在我看来,您需要管理何时将事件侦听器添加到元素,何时不添加。
-
如果您将两个侦听器添加到同一个元素,那就是问题所在。您应该为同一元素上的同一事件使用 N 个函数,而不是为同一事件使用 N 个侦听器。
-
我添加了代码和 JSFiddle 演示
标签: javascript event-listener reusability