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中测试,最新版本。
答案 0 :(得分:3)
我认为这是因为Javascript是同步的,因此当您设置window.location.hash
时,window.onhashchange
方法将不会运行,直到当前正在运行的onclick
函数完成。那有意义吗?因此,您设置.hash
值,然后绑定hashchange
事件...绑定后,onhashchange
事件实际触发。这样就可以调用close
。尝试在代码中放置console.log
语句以查看执行顺序。
<强>更新强>:
这是演示事物顺序的小提琴:http://jsfiddle.net/jmWDY/
注意首先调用原始onhashchange
函数(函数完成后),然后调用新绑定(close
)。我希望这有帮助!