我在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可以从应用程序的任何位置调用,例如通过单击页面某处的“下一步”按钮。
答案 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);
}
}