jQuery window.on('hashchange')事件未触发

时间:2013-01-30 12:13:34

标签: javascript jquery javascript-events

我在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事件尚未被触发,因为它尚未实际绑定到文档。

过去任何人都有任何可能导致此行为的想法或类似问题吗?

0 个答案:

没有答案