我正在处理一个旧代码,我在代码中看到有很多事件是用javascript addEventListener添加的,还有一些是用jQuery.on()添加的,但在同一元素上,但在分离方法中,它只使用jQuery.off()来删除它们。所以我想知道这段代码是否会像编写它的人预期的那样工作(从 dom 元素中删除所有事件),或者使用 javascript 添加的事件不会被删除。
它没有。
如果您调查本机 removeEventListener
api,您可以看到它需要原始回调才能成功删除。 据我所知,没有本机方法可以删除节点上的所有事件侦听器。
jQuery充当它所做的大部分事情的中介。 它这样做是为了它可以通过 on
和 off
之类的东西来保持对其 API 的控制。
如果您以跟踪添加的方式编写代码,以便以后可以执行某种清理步骤,这将不是问题;但是,它确实将责任放在您身上。
现在,如果所有浏览器都支持getEventListeners
就像Chrome一样,这可能是另一回事。 阅读本文以了解为什么这是不可取的。