2011-08-14 8 views
7

私は、location.hashに状態をプッシュするためにjQuery BBQプラグインを使用しています。hashchangeイベントをトリガーせずにハッシュをプログラムで更新しますか?

フィードバックループを防ぐために、プログラムで状態を設定するときに、ハッシュ変更リスナーを一時的に無効にしたいと思います。

私は、このソリューションを見てきました:それは時々私はこれを行うにもかかわらず、トリガーとして Change hash without triggering a hashchange event

残念ながら、完全に堅牢ではないようです。

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

は今ありますプログラムで状態をプッシュする方が良いでしょうか?おそらく別のJSライブラリですか?

答えて

2

タイムアウトでこれを行うと、確実に動作しません。リンクされた答えの重要な部分は、あなたのハンドラが知っているフラグを設定することです。コードの更新された質問を参照してください。

また、あなたのハンドラを再確立を担当しているイベントに、一時的なハンドラをバインドします

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); 
} 
関連する問題