【问题标题】:Updating the hash programmatically without triggering hashchange event?以编程方式更新哈希而不触发 hashchange 事件?
【发布时间】:2011-08-14 16:18:07
【问题描述】:

我正在使用 jQuery BBQ 插件将状态推送到 location.hash。

为了防止反馈循环,我想在以编程方式设置状态时暂时禁用 hashchange 监听器。

我见过这个解决方案: Change hash without triggering a hashchange event

不幸的是,即使我这样做,它有时也会触发,它似乎并不完全强大:

updateURL(obj){
  $(window).unbind( 'hashchange');
  $.bbq.pushState(obj);
  setTimeout( function() { bindHashChange()}, 500);
}

现在有更好的方法来以编程方式推送状态吗?也许是另一个 JS 库?

【问题讨论】:

    标签: javascript jquery url jquery-bbq


    【解决方案1】:

    在超时的情况下执行此操作将无法可靠地工作。链接答案的重要部分是设置您的处理程序知道的标志。有关代码,请参阅更新后的问题。

    或者,将临时处理程序绑定到负责重新建立处理程序的事件:

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 2010-11-15
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多