【发布时间】:2018-11-19 01:57:21
【问题描述】:
如果一个 div 有一个事件,并且该函数是一个匿名函数,传入一些长的缩小的 JS。如何从控制台中删除该事件?
我尝试过克隆和替换,或者替换outerHTML,但是这两种方法都会影响所有的innerHTML。
有没有办法在不引用函数本身的情况下删除 eventListener?只需删除所有附加到 div 的事件监听器?
【问题讨论】:
-
but both methods affect all the innerHTML.你的意思是这个问题是任何附加到 children 的监听器也会被删除,这是你不想要的吗? (您只希望删除附加到外部 div 的侦听器?)或者,更改innerHTML有什么问题? -
一个答案很简单:否:有没有办法在不引用函数本身的情况下删除 eventListener? 原因在于 JS 如何比较对象(函数对象在这种情况下)。它们通过引用进行比较 - 因此
add..和remove...都必须使用 reference 到同一对象。 -
@CertainPerformance 是的,不影响任何内部事件或元素,或其状态。
-
@RandyCasburn 我不明白的是,您可以轻松删除样式、类等属性...而无需引用 getElementById.thing = null 以外的任何内容
-
对 - 这是因为运行时正在查找用作事件处理程序的函数,相当于一个查找表。它根据提供的引用(对函数)和存储在查找表中的所有引用的比较来评估要删除的事件。正是通过比较来区分这个特殊的事物。
标签: javascript addeventlistener