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 中进行测试,最新版本。

4

1 回答 1

3

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

更新

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

请注意如何首先调用原始onhashchange函数(在您的函数完成后),然后是您的新绑定(即close)。我希望这有帮助!

于 2012-11-02T18:28:45.450 回答