首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Location.hash导致无限循环

Location.hash导致无限循环
EN

Stack Overflow用户
提问于 2013-11-26 19:49:33
回答 1查看 383关注 0票数 0

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

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

我的窗口监听器代码:

代码语言:javascript
代码运行次数:0
运行
复制
window.onhashchange = function() {
    var s;   
    if (location.hash.length > 0) {        
       s = parseInt(location.hash.replace('#',''),10);     
    } else {
       s = 1;
    }
    main.showScreen(s);
}

和我的屏幕更新代码:

代码语言:javascript
代码运行次数:0
运行
复制
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,例如,通过单击页面上的“下一步”按钮。

EN

回答 1

Stack Overflow用户

发布于 2013-11-26 20:16:16

在main.showScreen函数中,您可以:

代码语言:javascript
代码运行次数:0
运行
复制
if (location.hash != i)
  location.hash = i;

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

代码语言:javascript
代码运行次数:0
运行
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20216274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档