相关疑难解决方法(0)

在不触发hashchange事件的情况下更改哈希

我正在使用哈希来动态加载内容.为了使后退按钮工作,我正在捕获哈希变化.但是有时我需要更改散列而不触发散列更改功能(例如,当页面被重定向到服务器端时,我需要在内容返回后更新散列.)

我提出的最佳解决方案是取消绑定hashchange事件,进行更改然后重新绑定它.但是,由于这是异步发生的,我发现它重新绑定太快并仍然捕获哈希更改.

我目前的解决方案非常糟糕:在setTimeout中重新绑定.有没有人有更好的主意?

    $(window).unbind( 'hashchange', hashChanged);
    window.location.hash  = "!" + url;
    setTimeout(function(){
        $(window).bind( 'hashchange', hashChanged);
    }, 100);
Run Code Online (Sandbox Code Playgroud)


编辑:
Amir Raminfar的建议促使我找到一个不需要超时的解决方案.我添加了一个类变量

_ignoreHashChange = false;
Run Code Online (Sandbox Code Playgroud)

当我想静默更改哈希时,我这样做:

_ignoreHashChange = true;
window.location.hash  = "!" + url;
Run Code Online (Sandbox Code Playgroud)

并且散列更改事件执行此操作:

function hashChanged(event){
    if(_ignoreHashChange === false){
        url = window.location.hash.slice(2);
        fetchContent(url);
    }
    _ignoreHashChange = false;
}
Run Code Online (Sandbox Code Playgroud)

javascript jquery

49
推荐指数
2
解决办法
2万
查看次数

标签 统计

javascript ×1

jquery ×1