JS - 在创建新事件之前删除事件

时间:2014-07-14 08:19:10

标签: javascript javascript-events

每次打开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

由于

2 个答案:

答案 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);