调用 removeChild(el) 时是不是删除了 el.onclick? [复制]

Posted

技术标签:

【中文标题】调用 removeChild(el) 时是不是删除了 el.onclick? [复制]【英文标题】:Is el.onclick removed when removeChild(el) is called? [duplicate]调用 removeChild(el) 时是否删除了 el.onclick? [复制] 【发布时间】:2018-04-24 05:07:30 【问题描述】:

以下代码创建和删除一个带有 onclick 侦听器的按钮。

从 DOM 中移除元素后,onclick 监听器是否仍然存在?

let el = document.createElement('button')
el.innerhtml = "Test Button"
el.onclick = function()
    alert('A Click Happened')


document.body.appendChild(el)
document.body.removeChild(el)

奖励:el.addEventListener('click',() => alert('clicked') ) 也一样吗?

【问题讨论】:

逻辑上:元素被销毁后,附着在元素上的监听器如何持续存在? 【参考方案1】:

不,它不会持续存在,因为您要删除具有onClick() 属性的元素。 addEventListener() 则不然。

我觉得我正在为你回答一个测试问题,但我希望它会有所帮助。 :)

【讨论】:

处理程序是否持久化与 DOM 元素是否在 DOM 中无关。它是关于代码中某处是否存在对该元素的引用。 他在元素内部定义函数。因此删除元素会删除该功能。它没有理由持续存在,因为它只针对引用元素。 删除元素与垃圾回收元素不同。

以上是关于调用 removeChild(el) 时是不是删除了 el.onclick? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

React DOMException:无法在“节点”上执行“removeChild”:要删除的节点不是该节点的子节点

删除节点(removeChild())

我应该在 removeChild 之前从元素中删除事件处理程序吗?

删除节点removeChild()

(转载)Javascript removeChild()不能删除全部子节点的解决办法

在 chrome 中使用 document.removeChild() 删除脚本