添加后窗口hashchange listner调用


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

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

更新

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

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

相关内容

  • 没有找到相关文章