Location.hash导致无限循环

时间:2013-11-26 11:49:33

标签: javascript html

我在javascript中使用location.hash,允许用户在ajax屏幕之间切换(在同一个html页面中动态添加和删除的div)。

问题是,当我用javascript更新location.hash时,窗口监听器会立即触发!我只需要在实际点击后退按钮时触发此事件,而不是在我通过javascript更改历史记录时触发。

我的窗口监听器代码:

window.onhashchange = function() {
    var s;   
    if (location.hash.length > 0) {        
       s = parseInt(location.hash.replace('#',''),10);     
    } else {
       s = 1;
    }
    main.showScreen(s);
}

我的屏幕更新代码:

main.showScreen = function(i) {
    // allow the back button to switch between screens
    location.hash = i;
    // but setting location.hash causes this same function to fire again!
    //
    // here follows the code that adds a new div with new text content
    // ...
}

澄清一下:showScreen可以从应用程序的任何位置调用,例如通过单击页面某处的“下一步”按钮。

1 个答案:

答案 0 :(得分:0)

在main.showScreen功能中,您可以:

if (location.hash != i)
  location.hash = i;

或者,您可以使用最后一个哈希值设置文档范围的变量。

var lastHash = -1;
window.onhashchange = function() {
    var s;   
    if (location.hash.length > 0) {        
       s = parseInt(location.hash.replace('#',''),10);     
    } else {
       s = 1;
    }

    if (lastHash != s) {
      lastHash = s;
      main.showScreen(s);
    }
}