我正在使用散列來動態加載內容。爲了使後退按鈕工作,我正在捕獲哈希更改。但是有時我需要更改哈希而不觸發哈希更改函數(例如,當頁面被重定向到服務器端,並且一旦內容已返回,我需要更新哈希)。在不觸發hashchange事件的情況下更改散列
我已經想出了最佳解決方案是解開hashchange事件,進行更改並重新綁定它。然而,由於這是異步發生的,我發現它重新綁定的速度太快,並且仍然捕獲了哈希變化。
我現在的解決方案非常差:在setTimeout中重新綁定。有沒有人有更好的主意?
$(window).unbind('hashchange', hashChanged);
window.location.hash = "!" + url;
setTimeout(function(){
$(window).bind('hashchange', hashChanged);
}, 100);
編輯:
阿米爾Raminfar的建議促使我不需要超時的解決方案。 我添加了一個類變量
_ignoreHashChange = false;
當我想改變的哈希默默我這樣做:
_ignoreHashChange = true;
window.location.hash = "!" + url;
和哈希改變事件做到這一點:
function hashChanged(event){
if(_ignoreHashChange === false){
url = window.location.hash.slice(2);
fetchContent(url);
}
_ignoreHashChange = false;
}
一個不錯的,簡單的解決方案,你應該讓一個答案 – Peter 2012-09-19 09:19:47
的唯一剩下的就是在設置_ignoreHashChange = true之前檢查新散列是否與舊散列相同; – Kasheftin 2013-03-23 13:32:59
你可能想看看牛仔的燒烤圖書館,它可以很好地控制Back和Hashchange:http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js。 html – hybernaut 2010-11-05 14:26:25