删除按类添加的事件侦听器

时间:2018-03-23 06:56:02

标签: javascript extjs extjs4 extjs3

我想了解如何删除按类添加的事件侦听器,如下所示(删除div#mainMenu的事件)

enter image description here

我已经尝试了所有可用的方法但没有对我有用。另外我在extJS4.x版本中没有看到这个问题,但仅在3.4版本中。任何普通的JS代码来处理这个?

2 个答案:

答案 0 :(得分:1)

您可以使用 getEventListeners 函数来获取元素的侦听器映射。之后使用 removeEventListener 方法,从元素中删除事件。您可以使用此函数从元素中删除所有事件。

    function removeEventListeners(element, listenerMap) {
        Object.keys(listenerMap).forEach(function (name) {
            var listeners = listenerMap[name];
            listeners.forEach(function (object) {
                element.removeEventListener(name, object.listener);
            });
        });
    }
removeEventListeners(elementRef,getEventListeners(elementRef));

答案 1 :(得分:0)

最后,我已经找到了解决这个问题的方法。删除侦听器的方法是转到父div组件&在元素上调用removeAllListeners()方法。可以使用afterRenderHandler&amp ;; this.el函数在this.el.parent().removeAllListeners()函数中访问该元素。然后调用this.el.parent().parent().removeAllListeners(),以便删除干扰用户体验的不需要的侦听器。如果标识的侦听器是第n级父级(调用方法n次),则可以以链式方式调用父方法。

例如:var el = Ext.get('mainMenu');

如果您有ID,也可以尝试直接访问该元素:el.removeAllListeners();&然后调用CREATE INDEX invoices_idx ON invoices (invoice_date);

类似的方法可以通过获取对侦听器有问题的元素的句柄来应用于任何其他JS框架。