即使已删除DOM,仍会加载JQuery事件

时间:2013-09-01 23:58:03

标签: javascript jquery ajax

我有这个标记

  <html>
     <body>
       <div id ="wrap">
         <div id = "main-content">
           <!-- more markup here -->
           <script>
          $(window).scroll(function(){
           if($(window).scrollTop() >= ($(document).height() $(window).height())*0.7) {
               alert("SCROLLED") 
             }}); 
           </script>
         </div>
       </div>
     </body>
    </html>

我通常在执行ajax调用以删除“main-content”的内容,并使用此方法执行此操作

   $.get(sampleUrl, function(data) {
        var newTitle = $(data).filter('title').text();
        $('#main-content').children().remove();
        $('#main-content').html($(data).find('#main-content').html());
    },"html");

但是上面的代码只删除了DOM而不是像“scroll”事件这样的javascript事件,反正我是否可以删除/取消绑定它?

3 个答案:

答案 0 :(得分:4)

script标记放在它执行的页面上时。它会在eventListener上滚动window。删除main-content中的所有内容都不会撤消监听器,您的window显然仍然存在。

如果希望停止此行为,则需要致电$(window).off('scroll')

$(window).unbind是一种旧方法,已被弃用。

<强>旁注:

如果可以的话,你想避免使用内联JS。

答案 1 :(得分:1)

$(window).off('scroll')应该可以解决问题。

答案 2 :(得分:1)

$(window).unbind('scroll');

事件绑定到窗口 - 在页面上script标记在执行代码并绑定事件后没有任何区别。


实际上unbind()是老派的方式,这些天$(window).off('scroll');"preferred" - 除非您使用的是早于1.7的旧版jQuery。 unbind()仍然有效,尚未弃用,但总有可能存在。