清除每个事件处理程序

时间:2012-01-15 04:09:38

标签: javascript javascript-events

我想取消使用Javascript在页面中定义的每个事件处理程序。换句话说,如果页面先前在许多不同的DOM级别上设置了许多事件侦听器,则此方法将简单地删除它们中的每一个。有没有办法在Javascript中执行此操作?

2 个答案:

答案 0 :(得分:2)

要清除动态附加到页面正文中元素的所有事件,您可以执行以下操作:

document.body.innerHTML = document.body.innerHTML;

要清除附加到窗口对象的事件,您可以执行以下操作:

window.onscroll = function() {};

依旧......

答案 1 :(得分:1)

不,没有本地事件列表可以看到什么是绑定的。如果你想要更好的事件管理,JQuery有它自己的。

以下是在JQuery中的完成方式:

(function($) {
    $.eventReport = function(selector, root) {
        var s = [];
        $(selector || '*', root).andSelf().each(function() {
            var e = $.data(this, 'events');
            if(!e) return;
            s.push(this.tagName);
            if(this.id) s.push('#', this.id);
            if(this.className) s.push('.', this.className);
            for(var p in e) s.push('\n', p);
            s.push('\n\n');
        });
        return s.join('');
    }
    $.fn.eventReport = function(selector) {
        return $.eventReport(selector, this);
    }
})(jQuery);

您可以通过各种方式调用它来满足您的需求:

// all events
alert($.eventReport());

// just events on inputs
alert($.eventReport('input')); 

// just events assigned to this element
alert($.eventReport('#myelement')); 

// events assigned to inputs in this element
alert($.eventReport('input', '#myelement')); 
alert($('#myelement').eventReport('input')); // same result

// just events assigned to this element's children
alert($('#myelement').eventReport()); 
alert($.eventReport('*', '#myelement'); // same result

从那里开始,取消绑定非常简单。