在AJAX调用后重置/禁用无限滚动

我正在使用无限-ajax-scroll( https://github.com/webcreate/infinite-ajax-scroll )插件进行过滤。 我有filter使用无限滚动但我的问题是,每当滚动得到一个filter的结果的结束它将不再滚动,即使选择了另一个filter。 因此,我需要在选择filter时重置infinate滚动但我在文档中找不到如何重置这个并且对JQuery不太好,所以无法解决这个问题。

我也有一些不需要iniliniate滚动的filter,也需要一种方法来禁用它们。

$('.filter a').click(function() { //reset scroll somehow //setTimeout("jQuery.ias({container: '#container'})",1000); var $this = $(this); var URL = $this.attr('href'); loadMoreItems(URL, $this); }); return false; }); jQuery.ias({ container: '#container', // main container where data goes to append item: '.element', // single items pagination: '.paginate', // page navigation next: '.paginate a', // next page selector loader: '', noneleft: 'No more discounts for your selection', triggerPageThreshold: '10', trigger: "Load more items", history: false, thresholdMargin: -350 }); 

其他人和你有同样的问题 ; 根据作者的说法,目前不可能干净地重新初始化IAS。

所以你的选择似乎是

1)通过删除事件处理程序并在每次filter更改时再次调用jQuery.ias({...}) )来硬重置插件

2)切换到不同的库。 该错误报告中的用户写了自己的 – 也许他的解决方案对你有用

就像janfoeh所说,没有什么可以正确地重新初始化插件。 您应该从窗口取消绑定滚动并再次调用元素上的init。

我建议你将初始化包装成一个函数,以便重新初始化。

 $('.filter a').click(function() { $(window).unbind('scroll'); initscroll(); }); function initscroll(){ jQuery.ias({ container: '#container', // main container where data goes to append item: '.element', // single items pagination: '.paginate', // page navigation next: '.paginate a', // next page selector loader: '', noneleft: 'No more discounts for your selection', triggerPageThreshold: '10', trigger: "Load more items", history: false, thresholdMargin: -350 }); } initscroll(); 

所以你必须在加载和过滤时调用initscroll。

Infinite Ajax Scroll的第2版​​开始,有一种新方法可以解决这类问题。 调用new方法destroy() unbind ()的别名,你将从任何窗口或文档事件中取消绑定IAS。 之后您可以重新绑定IAS对象。

 $('.filter a').click(function() { setTimeout(function() { ias.destroy(); }, 1000); var $this = $(this); var URL = $this.attr('href'); loadMoreItems(URL, $this); ias.bind(); }); 

类似的东西,没有测试。 您可以在http://infiniteajaxscroll.com/docs/methods.html上查看此方法