Javascript 以编程方式更新哈希时禁用hashchange侦听器(jQuery BBQ)

Javascript 以编程方式更新哈希时禁用hashchange侦听器(jQuery BBQ),javascript,jquery,fragment-identifier,hashchange,jquery-bbq,Javascript,Jquery,Fragment Identifier,Hashchange,Jquery Bbq,为了防止以编程方式设置URL哈希(#)时出现反馈循环(与手动更改URL相反),我想暂时禁用hashChange侦听器 在使用更新哈希时,如何更改此代码以实际禁用hashchange事件?(下面的代码不起作用) hashchangenabled:true, bindHashChange:function(){ var=这个; $(窗口).bind('hashchange',函数(事件){ if(that.hashchangenabled==true){ stateObj=event.getStat

为了防止以编程方式设置URL哈希(#)时出现反馈循环(与手动更改URL相反),我想暂时禁用hashChange侦听器

在使用更新哈希时,如何更改此代码以实际禁用hashchange事件?(下面的代码不起作用)

hashchangenabled:true,
bindHashChange:function(){
var=这个;
$(窗口).bind('hashchange',函数(事件){
if(that.hashchangenabled==true){
stateObj=event.getState()
stateChangedHandler(stateObj);
}
});
},
updateURL:函数(哈希){

this.hashChangeEnabled=false;//当事件处理程序中的代码执行时,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事件触发)


问题是BBQ不会检查新状态是否真的不同。因此,如果我推送相同的状态,hashChangeEnabled将设置为“false”,而不会重置为“true”,因为您在hashchange侦听器中执行此操作,而hashchange侦听器从未触发过..?谢谢!
if (hash !== $.param.fragment()) {
  this.hashChangeEnabled = false;
  $.bbq.pushState(hash);
}
this.hashChangeEnabled = false;
$.bbq.pushState(hash);
setTimeout(function() { this.hashChangeEnabled = true; }, 500);