gpt4 book ai didi

javascript - 以编程方式更新哈希时禁用 hashchange 监听器 (jQuery BBQ)

转载 作者:行者123 更新时间:2023-12-01 01:52:22 24 4
gpt4 key购买 nike

为了防止以编程方式设置 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(如果哈希值发生更改,则等待 hashchange 事件触发)

this.hashChangeEnabled = false;
$.bbq.pushState(hash);
setTimeout(function() { this.hashChangeEnabled = true; }, 500);

关于javascript - 以编程方式更新哈希时禁用 hashchange 监听器 (jQuery BBQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6290950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com