2012-11-02 28 views
2
overlay.onclick = function(e){ 
    e.preventDefault(); 
    window.location.hash = 'overlay'; 

    var close = function(){ 
     //do some stuff 
     window.removeEventListener('hashchange', close); 
    } 

    window.addEventListener('hashchange', close, false); 
} 

基本上,只要我點擊鏈接,哈希被更新,並關閉函數調用。關閉函數不應該被綁定,直到散列更改後。爲什麼在添加偵聽器後立即調用close函數,以及如何阻止它。在Chrome中進行測試,最新版本。添加窗口hashchange listner後調用

回答

3

我認爲這是因爲Javascript是同步的,因此當您設置window.location.hash時,window.onhashchange方法將不會運行,直到onclick函數當前正在運行完成。那有意義嗎?因此,您設置了.hash值,然後綁定hashchange事件...在綁定之後,onhashchange事件實際上會觸發。因此,這又稱爲close。嘗試在整個代碼中放置console.log語句來查看執行順序。

UPDATE

下面就來證明事物的秩序小提琴:http://jsfiddle.net/jmWDY/

注意如何原來onhashchange函數首先調用(後您的函數執行完畢),那麼你的新的結合(這是close)。我希望這有助於!