jquery无限卷轴“;重置";

jquery无限卷轴“;重置";,jquery,ajax,infinite-scroll,jquery-infinite-scroll,Jquery,Ajax,Infinite Scroll,Jquery Infinite Scroll,我正在为一个网站()使用无限滚动jquery插件 一切都很好,除了我的页面是一个搜索,所以…发生的是: 1) 当你进入页面时,浏览器会自动定位你,并返回你周围的项目列表(如条形图)。需要无限滚动来避免对该列表进行分页。直到这里一切都正常…除了我可以到达“无限页面的结尾”和插件“从卷轴上解开”之外 2) 现在……当你想在输入文本中手动插入地址时,你可以自由地这样做……你写下你的地址,然后按enter键……然后使用ajax(无页面刷新)……我会查找lat/lon,找到地址,更改无限滚动的导航链接……

我正在为一个网站()使用无限滚动jquery插件

一切都很好,除了我的页面是一个搜索,所以…发生的是:

1) 当你进入页面时,浏览器会自动定位你,并返回你周围的项目列表(如条形图)。需要无限滚动来避免对该列表进行分页。直到这里一切都正常…除了我可以到达“无限页面的结尾”和插件“从卷轴上解开”之外

2) 现在……当你想在输入文本中手动插入地址时,你可以自由地这样做……你写下你的地址,然后按enter键……然后使用ajax(无页面刷新)……我会查找lat/lon,找到地址,更改无限滚动的导航链接……而且,我觉得自己很笨,但我想不出一个方法来“重新激活”或“重新绑定”插件到事件…因此我的“新搜索结果”没有新的“无限滚动”实例

(页面“拆分”正确且正确地返回一个json,尝试更改“页面=编号”)

这是控制台中发生的情况:

["math:", 0, 468]
jquery.infinitescroll.min.js:20["heading into ajax", 
Array[2]
    0 : "/ajax/getCoworkings/?page="
    1 : "&latitude=52.5234051&longitude=13.4113999&distance=12"
    length : 2
    __proto__ : Array[0]
]
jquery.infinitescroll.min.js:20["Using JSON via $.ajax() method"]
jquery.infinitescroll.min.js:20["Error", "end"]
jquery.infinitescroll.min.js:20["Binding", "unbind"]

“解除绑定”后,我无法再次绑定它,因此在我的下一个搜索结果中有无限滚动条……。

假设您创建了无限滚动条,如:

//This will initiate with default values for example purpose
$("#myelement").infinitescroll();
那么,您是否可以简单地完全销毁该实例:

$("#myelement").infinitescroll("destroy");
//Reset anything else that may cause the page to blow up here
//And then create a new instance with different path variables:
//Note, obviously you'll be initializing it with custom selectors/settings etc so include those as well
$("#myelement").infinitescroll({pathParse:["/ajax/getCoworkings/?page=","&latitude=52.5234051&longitude=13.4113999&distance=12"]});
基本上,如果您不定义pathParse,脚本会尝试自行解决。如果您定义了pathParse,那么它将使用您提供的内容。它不是很优雅,更像是一种黑客行为,但目前在infinite scroll中不严格支持更改pathParse。

已解决

我补充说:

if (xhr == 'destroy') {
    $.removeData(this.element[0]);
}
在功能上

_error: function infscr_error(xhr) {
第228行

也许这不是最好的方法,但这正是我需要的

我现在所做的基本上就是你所建议的:

一,

二,

…无需修改“pathParse”值
但那是因为我正在修改选择器(next/nav)

之前,使用jQuery。

这里没有提到,但是(在我的无限滚动版本中),您还必须设置两个变量,才能重新实例化InfiniteScroll。您还必须重新绑定它。下面是代码:

$('#cardContainer').infinitescroll('destroy'); // Destroy

// Undestroy
$('#myContainer').infinitescroll({                      
    state: {                                              
        isDestroyed: false,
        isDone: false                           
}
});

InitInfiniteScroll(); // This is a wrapper for the standard initialization you need

// Re-initialize
$('#myContainer').infinitescroll('bind');
项目3)

}

不起作用。至少在最新版本中。砖石厂抱怨 '无法在初始化之前调用砌体上的方法;尝试调用方法'reload''


我不得不做一些类似的事情,因为我的代码根据用户操作而不是仅仅依靠计数器来更新目标url

我最终实现了以下重置方法,然后可以使用$container('reset')调用该方法

我还实现了一个私有方法来重置悬停消息,因为否则它将继续发出“不再有页面”通知

_resetmsg: function infscr_resetmsg() {
        var opts = this.options;
        opts.loading.msg = $('<div id="infscr-loading"><img alt="Loading..." src="' + opts.loading.img + '" /><div>' + opts.loading.msgText + '</div></div>');
        this._debug('Reset loading message');
    },
\u resetmsg:function infscr\u resetmsg(){
var opts=this.options;
opts.loading.msg=$(“”+opts.loading.msgText+“”);
此。_调试(“重置加载消息”);
},

infinitescroll通过
$.data
将其所有实例数据存储在元素本身上,因此删除该实例数据是完全重置infinitescroll的唯一可靠方法

$elem.infinitescroll('destroy');
$elem.data('infinitescroll', null);
这两条线应该能干净利落地摧毁你的卷轴

$elem.infinitescroll('destroy');
$elem.data('infinitescroll', null);
//现在,可以正常地重新初始化无限滚动,而不会与上一个实例发生任何冲突或冲突


请注意,截至2012年6月,在jquery.infinitescroll(v2.0)的最新版本中,前面的答案都不适用于我。

您只需将以下代码添加到无限滚动声明中即可

errorCallback : function() {
    isc.getContainer().infinitescroll('destroy');
    $.removeData(this);
},

注意不在infinitescroll.js文件中,它应该在您的自定义无限滚动声明中。

在尝试其他解决方案无效后,这对我有效:

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

参考文档的1/4:

没有帮助,我仍然有相同的问题,没有新的“.infinitescroll()”在“销毁”之后也没有:-|啊,removeData()的想法很好函数。我认为它需要加入插件的销毁函数中。这很困难,因为实际上您正试图从实例本身中销毁实例!此注释是否与我的答案相关,但放置在错误的位置?:Pi还必须注释此行//$(opts.navSelector).hide();,为了使其正常工作,它对opts.pixelsFromNavToBottom给出了不正确的结果,因为我们隐藏了元素,这在之前创建插件一次并不重要,但在我们的例子中,它创建了超过,并导致了错误的pixelsFromNavToBottom值注意:这个解决方案在2012年6月似乎不再有效。我很抱歉同样使用v2,这是唯一对我有效的解决方案。2019年阅读这篇文章的任何人都可以使用。当我使用
$elem.infiniteScroll('destroy');
$elem.data('infiniteScroll',null);
时,这只适用于我的v3.0.5版本。区分大小写。
_resetmsg: function infscr_resetmsg() {
        var opts = this.options;
        opts.loading.msg = $('<div id="infscr-loading"><img alt="Loading..." src="' + opts.loading.img + '" /><div>' + opts.loading.msgText + '</div></div>');
        this._debug('Reset loading message');
    },
$elem.infinitescroll('destroy');
$elem.data('infinitescroll', null);
errorCallback : function() {
    isc.getContainer().infinitescroll('destroy');
    $.removeData(this);
},
$(window).unbind('.infscr');