我在window对象上使用jquery.on方法来绑定hashchange事件。但这是第一次发生。似乎什么也没发生
这是我的代码:
PageLoad = {
ignoreHashChange: false,
hashChanged: function(oldURL) {
if (this.ignoreHashChange) {
this.ignoreHashChange = false;
return;
}
/* snip */
},
init: function() {
$(window).on('hashchange', function(e) {
this.hashChanged(e.originalEvent.oldURL);
}.bind(this));
},
updateHash: function(hash) {
if ($._data(window, "events").hashchange != undefined) {
this.ignoreHashChange = true;
}
window.location.hash = hash;
}
};
在准备好的文档中执行了一些ajax调用,这会返回一些数据并将其插入到正文中。我使用updateHash方法更新哈希。在将ignoreHashChange属性设置为false之前,我专门检查是否在窗口对象上绑定了hashchange事件。 (将其设置为false可确保我的应用程序不会返回到将重新加载同一页面的“路由”操作。
但是,当调用updateHash时(第一次)它会检测到窗口确实有绑定到它的hashchange事件,因此它将ignoreHashChange设置为true。我调整window.location.hash后,但窗口上的hashchange事件未被触发。
如果我稍后手动更改哈希值,则this.ignoreHashChange仍设置为true,因此它会忽略更改。
之后的一切都按预期工作。调用PageLoad.updateHash('hash');更改哈希值,但不路由应用程序。手动更改哈希值会更改哈希值,并将网站路由到新内容。
我唯一可以想到为什么会这样。当调用第一个window.location.hash时,Jquery仍然必须设置window.onhashchange事件,以便绑定(在jquery中)的hashchange事件尚未被触发,因为它尚未实际绑定到文档。
过去任何人都有任何可能导致此行为的想法或类似问题吗?