用程序更新哈希时禁用hashchange监听器(jQueryBBQ)
Disabling hashchange listener when updating hash programatically (jQuery BBQ)
为了防止在以编程方式设置URL哈希(#)时出现反馈循环(与手动更改URL相反),我想暂时禁用hashChange侦听器。
当使用$.bbq.pushState(hash)更新哈希时,我应该如何更改此代码以实际禁用hashchange事件?(下面的代码不起作用)
hashChangeEnabled : true,
bindHashChange : function(){
var that = this;
$(window).bind( 'hashchange', function( event ) {
if(that.hashChangeEnabled == true){
stateObj = event.getState()
that.stateChangedHandler(stateObj);
}
});
},
updateURL : function(hash){
this.hashChangeEnabled = false; // <--- Look here
$.bbq.pushState(hash);
this.hashChangeEnabled = true;
},
hashchange事件异步触发,当事件处理程序中的代码执行时,hashChangeEnabled已重置为true。您应该在hashchange事件中重置您的hashChangeEnabled:
if(that.hashChangeEnabled == true){
stateObj = event.getState()
that.stateChangedHandler(stateObj);
}
else {
that.hashChangeEnabled = true;
}
在您的updateURL函数中,您可以检查哈希是否已更改:
if (hash !== $.param.fragment()) {
this.hashChangeEnabled = false;
$.bbq.pushState(hash);
}
或者使用setTimeout重置hashChangeEnabled(如果hash更改,请等待hashchange事件触发)
this.hashChangeEnabled = false;
$.bbq.pushState(hash);
setTimeout(function() { this.hashChangeEnabled = true; }, 500);
相关文章:
- Javascript全局onclick监听器
- 如何在td元素中添加监听器
- 监听器必须是一个函数
- 我如何获得这个javascript来计算两个监听器字段作为价格
- 在下拉式javascript事件监听器中选择时触发事件
- document.addEventListener和window.addEvent监听器之间的区别
- 如何在音频元素上使用React媒体合成事件监听器
- Javascript事件监听器让我很困惑
- JQuery:所有按钮只使用一个监听器有什么缺点吗
- JQuery在ace:dataTable分页器上为锚点类单击监听器
- javascript的事件监听器将下拉列表转换为输入按钮
- 组合类和事件监听器:`this`关键字
- 在video.js播放器上制作水印,成为播放和停止的监听器
- 将事件监听器添加到画布时出错
- 如何通过javascript触发事件监听器
- 通过事件监听器在circle的文本匹配id上修改circle元素
- ExtJs按钮-单击监听器时更改文本和cls
- 动态添加javascript事件监听器,做一些无法解释的事情
- 事件处理程序&事件监听器彼此独立
- 用程序更新哈希时禁用hashchange监听器(jQueryBBQ)