2015-01-14 20 views
-1

我想通过ajax加载下一篇文章。第一次运行良好,但第二次该网站加载全新。 preventDefault似乎不起作用。preventDefault在第一时间有效,但不在第二次

我已经看到类似的问题,我已经使用建议的解决方案,但它不适合我。 (。上或.live方法)

这里是我的代码:

 // Ajax load more posts 
     var loadMorePosts = function(e){ 
      e.preventDefault(); 
      var $container = $("#primary"); 
      var $loadMoreButton = $("#nav-ajax .nav-more"); 
      var $nextPageLink = $loadMoreButton.find("a").attr("href"); 

      // do the ajax magic 
      $.post($nextPageLink, function(data){ 
       var $mainWrap = $("#main-wrap", data); 
       var $content = $mainWrap.find("#primary article"); 

       // add the loaded posts 
       $container.append($content); 

       // grab the next PageLink 
       var $nextLoadMoreButton = $mainWrap.find("#nav-ajax .nav-more"); 
       $loadMoreButton.replaceWith($nextLoadMoreButton); 


      }, "html");    
     } // end loadMorePosts 


     // Bind Functions 
     $("#nav-ajax .nav-more").on("click", loadMorePosts); 

我在做什么错?

感谢您的帮助提前! 汤米

+1

'$ loadMoreButton.replaceWith($ nextLoadMoreButton);'新按钮可能不具备的情况下,你认为它。 –

+0

对'on()'使用委托方法..参见文档。或者当你更改html – charlietfl

回答

1

你跟在每次点击更换一个新的“载荷更多按钮”,推断基于这一行:

$loadMoreButton.replaceWith($nextLoadMoreButton); 

这会导致点击事件绑定丢失,作为新替换按钮不会继承绑定到其较旧对象的点击事件。您应该使用.on(),并侦听click事件冒泡到document对象,而不是:

$(document).on("click", "#nav-ajax .nav-more", loadMorePosts); 
+0

真棒时再次绑定事件处理程序!谢谢你的解释 – Tommy

相关问题