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
)。我希望这有所帮助!