添加后调用window hashchange监听器

时间:2012-11-02 18:15:54

标签: javascript hashchange

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函数正在调用。在更改散列之后,不应绑定close函数。为什么在添加侦听器后立即调用close函数,以及如何阻止它。在Chrome中测试,最新版本。

1 个答案:

答案 0 :(得分:3)

我认为这是因为Javascript是同步的,因此当您设置window.location.hash时,window.onhashchange方法将不会运行,直到当前正在运行的onclick函数完成。那有意义吗?因此,您设置.hash值,然后绑定hashchange事件...绑定后,onhashchange事件实际触发。这样就可以调用close。尝试在代码中放置console.log语句以查看执行顺序。

<强>更新

这是演示事物顺序的小提琴:http://jsfiddle.net/jmWDY/

注意首先调用原始onhashchange函数(函数完成后),然后调用新绑定(close)。我希望这有帮助!