dan*_*ani 8 javascript url jquery jquery-bbq
我正在使用jQuery BBQ插件将状态推送到location.hash.
为了防止反馈循环,我想在以编程方式设置状态时暂时禁用hashchange侦听器.
我见过这个解决方案: 更改哈希而不触发hashchange事件
不幸的是,它似乎并不完美,因为它有时会触发,即使我这样做:
updateURL(obj){
$(window).unbind( 'hashchange');
$.bbq.pushState(obj);
setTimeout( function() { bindHashChange()}, 500);
}
Run Code Online (Sandbox Code Playgroud)
现在是否有更好的方法以编程方式推送状态?也许是另一个JS库?
超时执行此操作不会可靠地工作。链接答案的重要部分是设置一个您的处理程序知道的标志。请参阅更新的代码问题。
或者,将临时处理程序绑定到负责重新建立处理程序的事件:
function updateState(state, handler) {
var win = $(window);
function temporaryHandler() {
win.unbind('hashchange', temporaryHandler);
win.bind('hashchange', handler);
};
win.unbind('hashchange', handler);
win.bind('hashchange', temporaryHandler);
$.bbq.pushState(state);
}
Run Code Online (Sandbox Code Playgroud)