删除元素是否也会删除其事件侦听器?

时间:2013-09-24 15:57:49

标签: javascript html

如果您还删除了removeChild()元素,则会删除与商品相关联的事件?即使使用简单的this.innerHTML =''删除了该项目?这同样适用于与此<div onclick="/*this event*/"> </div>这样的内联元素相关联的事件?提前谢谢。

2 个答案:

答案 0 :(得分:7)

答案是,这取决于你是否有引用。

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.

如果您无法再访问它,该元素将与侦听器一起被垃圾收集(对于所有浏览器&gt; IE6)。

答案 1 :(得分:4)

我做了以下测试:

<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。

enter image description here