Javascript 我应该删除所有事件处理程序吗?

Javascript 我应该删除所有事件处理程序吗?,javascript,jquery,javascript-events,event-handling,Javascript,Jquery,Javascript Events,Event Handling,大多数情况下,当只有一个或两个事件处理程序时,我不会删除它们。 但现在我正在设计一个网页,它将使用ajax获取HTML内容并附加到DOM中 <body> <ul class="menu"> <li><span id="mainMenuAcc">profile</span></li> <li><span id="mainMenuTop">contact</s

大多数情况下,当只有一个或两个事件处理程序时,我不会删除它们。 但现在我正在设计一个网页,它将使用ajax获取HTML内容并附加到DOM中

<body>
    <ul class="menu">
        <li><span id="mainMenuAcc">profile</span></li>
        <li><span id="mainMenuTop">contact</span></li>
    </ul>
    sdfgsegg <br/>
    <div id="container">
    </div>
</body> 


$.ajax({
    url:url,
    beforeSend: function(){
        showSpinner(true);
    },
    success: function(result){
        container.html(result);
        if (page1){
            page1_initUI();
        } else if (page2){
            page2_initUI();
        }
    },
    error: function(obj, errMsj){
        alert("Ajax connection fail. " + errMsj);
    },
    complete: function(){

        showSpinner(false);
    }

  });

  • 侧面图
  • 接触
sdfgsegg
$.ajax({ url:url, beforeSend:function(){ showSpinner(真); }, 成功:功能(结果){ html(结果); 如果(第1页){ page1_initUI(); }否则如果(第2页){ page2_initUI(); } }, 错误:函数(obj、errMsj){ 警报(“Ajax连接失败”。+errMsj); }, 完成:函数(){ showSpinner(假); } });
如您所见,用户可以单击不同的列表项来切换页面,因此DOM对象将被反复插入和删除
page1_initUI
page2_initUI
将在ajax调用成功后运行事件处理程序绑定


我担心在这种情况下,这会导致一些内存泄漏或缺陷。有人能告诉我在这种情况下该怎么办吗?浏览器会自动垃圾收集事件处理程序吗?

事件处理程序在哪里?您可以考虑使用委托的事件处理程序,以便在文档准备就绪时只设置它们一次,在每个Ajax加载之后它们将继续工作。不,我们看不到。。。如果从DOM中删除一个元素,那么相关的处理程序也会被删除,除非您使用某种delegationStart来解决一些性能问题。在这种情况下,请在Chrome开发者工具时间轴选项卡中查看您的页面。