调用 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 之前从元素中删除事件处理程序吗?