2012-05-28 43 views
0

我正在使用一個非常簡單的jQuery無限滾動來消除對編號分頁的需求,但我遇到了一個小問題。取消綁定jQuery無限滾動當與pjax一起使用

當我去到使用無限滾動的頁面,並加載它,按計劃的無限滾動將工作,但是當我然後使用pjax該頁面進行瀏覽,它仍然會在所有其他網站的網頁爲運行它仍然是一個加載函數?

我能做些什麼來基本上告訴無限滾動函數只能在我想要的頁面上運行,或者在pjax改變頁面時以某種方式重置它?

這裏是我的無限滾動碼迄今:

$(window).on("scroll", function() { 

    if($(window).scrollTop() == $(document).height() - $(window).height()){ 

     // Do scroll pagination, load content into #load-here .. 
    } 
} 

這就是我想要的滾動的功能:

$("a:not(.no-dynamic)").pjax("#main"); 

$(document).on('pjax:end', function() { 
    if($("#load-here").length == 0) { 
     $(window).off("scroll"); 
    } 
    else 
     $(window).on("scroll"); 
}); 

回答

1

我有類似的問題。如果特定div(隱藏分頁div)不再存在,則通過解除滾動處理程序解除它。

$(window).scroll(function() 
{ 
    if($('#pagination').length == 0){ 
    $(window).unbind('scroll',<<scroll handler function>>); 

     return; 
} 
    ...... 
} 
+0

雖然你如何轉動回滾?對我來說,一旦它被解除綁定,它會在刷新之前再次不起作用? – Dan

+0

- 寫一個函數 - scrollHandler。 - 當$('#pagination')div存在時,將滾動函數滾動到窗口滾動&當它不存在時解除綁定。 (使用jquery ajax,可以在ajaxComplete事件處理程序中執行此操作。 – Samba

0

手柄window.onbeforeunload解除綁定無限滾動

+1

我不認爲'onbeforeunload'被pjax觸發。可能是錯誤的,雖然... –

1

試試這個:

代替$(window).scroll(),更多信息:

$(window).on('scroll', function() { 
    // stuff 
}); 

我從來沒有用過pjax,但根據docs,有一個end回調,您可以使用:

$(document) 
    .on('pjax:end', function() { 
     $(window).off('scroll'); 
    }); 

的想法是從window每個取消綁定「滾動」事件時間pjax請求結束。

+0

啊我看到了,我以前沒有使用'.off()',看起來像我所需要的。 – Dan

+0

這種方法可以關閉滾動,但是即使使用'$(window).on('scroll',function(){});'? – Dan