确定事件处理程序在DOM元素上消失的原因

Determine why an event handler disappears on a DOM element

本文关键字:消失 元素 DOM 事件处理 程序      更新时间:2023-09-26

(在Chrome中)是否有一种简单的方法可以确定何时从元素中删除事件处理程序(用于单击)?我的一个事件处理程序正在神秘地消失,但我不确定是否有一种快速简单的方法可以在发生这种情况时暂停或获取堆栈跟踪/异常。

在调试环境中,运行此代码并查看console

(function () {
    var ael = Node.prototype.addEventListener,
        rel = Node.prototype.removeEventListener;
    Node.prototype.addEventListener = function (a, b, c) {
        console.log('Listener', 'added', this, a, b, c);
        ael.apply(this, arguments);
    };
    Node.prototype.removeEventListener = function (a, b, c) {
        console.log('Listener', 'removed', this, a, b, c);
        rel.apply(this, arguments);
    };
}());

如果有必要查看更多信息,您可能还想调用console.trace或为函数指定一个名称,以便使用.callerarguments.callee已折旧,因此使用名称来引用自身)