每次打开popover时,我都会使用此函数创建一个事件:
var createCustomEvent = function() {
var event;
if (document.createEvent) {
event = document.createEvent("HTMLEvents");
event.initEvent("CUSTOM EVENT", true, true);
} else {
event = document.createEventObject();
event.eventType = "CUSTOM EVENT";
}
event.eventName = "CUSTOM EVENT";
if (document.createEvent) {
popover.dispatchEvent(event);
} else {
popover.fireEvent("on" + event.eventType, event);
}
};
在另一个脚本中,我这样做是为了向节点添加一个事件监听器:
document.removeEventListener('CUSTOM EVENT', handler);
document.addEventListener('CUSTOM EVENT', handler);
现在在一些弹出窗口打开后,我在CUSTOM EVENT
中创建了很多document
(我使用getEventListeners(document)
来测试它)。
我在控制台中使用getEventListeners(document)看到很多CUSTOM EVENT
,所以我认为它们是事件监听器,但是在创建新的之前我总是删除EventListener
所以可能问题是我有很多事件< / em>而不是事件监听器,我不确定。
如何避免这种情况,并且只使用javascript创建一个CUSTOM EVENT
?
由于
答案 0 :(得分:2)
通过documentation使removeEventListener
工作,您还必须提供处理程序。
我建议在createCustomEvent
中创建一系列事件类型,如下:
var createCustomEvent = function(elem, event, handler) {
if (!elem.events)
elem.events = [];
if (!elem.events[event])
{
elem.events[event] = handler;
[your handler attaching here]
}
}
通过这种方式,您可以跟踪附加到其上的事件和处理程序;请记住,上面的代码跟踪一个事件(因为,您将只能附加一个给定类型的事件)。
答案 1 :(得分:0)
对不起我的坏人,Felix Kling是对的,问题在于:
document.removeEventListener(...);
错误的电话是:
document.removeEventListener('CUSTOM EVENT');
正确的是:
document.removeEventListener('CUSTOM EVENT', handler);