如果您还使用removeChild()
?删除元素,则删除与项目关联的事件。即使使用简单的this.innerHTML =''
? 这同样适用于与这样的内联元素关联的事件<div onclick="/*this event*/"> </div>
?提前致谢。
问问题
5798 次
2 回答
9
答案是,这取决于您是否引用了它。
var d = document.createElement('div');
otherElement.appendChild(d);
otherElement.removeChild(d);
// still have reference to d, it will exist, event listener remains even if it won't be fired.
如果您无法再访问它,则该元素将与侦听器一起被垃圾收集(适用于所有浏览器 > IE6)。
于 2013-09-24T16:03:05.970 回答
5
我做了以下测试:
<div class="wrapper">
<a href="#">Link</a>
</div>
<script type="text/javascript">
window.onload = function() {
var wrapper = document.querySelector(".wrapper");
var link = document.querySelector("a");
link.addEventListener("click", function() {
console.log("click");
});
setTimeout(function() {
wrapper.innerHTML = "";
}, 4000)
}
</script>
并在开发工具中监控结果。加载页面后,附加的事件从 5 变为 6。链接从 DOM 中删除,事件侦听器再次变为 5。
于 2013-09-24T16:29:40.983 回答