7

我正在尝试使用填充当前选定选项卡的索引

history.pushState({tabSelected: 1}, null, "");

我在 jquery 中有一个 popstate 事件的处理程序,它以编程方式切换 jquery ui 选项卡。

 $(window).bind("popstate", function(event) {
                               var state = event.originalEvent.state;
                               ...
                            }

这工作正常,浏览器和我可以使用后退和前进按钮在选项卡之间切换。也适用于两层标签。

但在某些情况下,我想将其他状态推送到堆栈。所以我做了以下事情:

 var content = { targetId : id,
                  targetContent : $("#myDivId").html()
               };
 $.extend(content, {tabSelected: currentTab});
 history.pushState(content, null, "");

内容在我将其推送到历史之前和之后看起来都不错。用 console.log(history.state); 检查 还尝试检查 chrome 控制台。

但是在我的 popstate 处理程序中,我没有看到对象 event.originalEvent.state 上的 targetId、tabSelected 属性。我在对象上看到了正确的 tabSelected 值,但由于某种原因,我看到了一个修剪状态。

在 Chrome 和 Firefox 中检查。无法获取正确的内容。有什么想法可能是错的吗?提前致谢。

更新

还尝试在每个 pushstate 上增加一个全局变量并将其添加到状态中。事实证明,对于我提到的特定情况,全局变量的值变为 48 而不是 49,这意味着它正在接收最后一个事件。我没有看到我的 popstate 处理程序在两者之间被调用。不知道发生了什么。

另一个更新

当我调用 history.pushState(content, null, "") 两次它工作正常。(仅在一个地方,在另一个地方我仍然称之为一次)。看起来由于某种原因,浏览器正在返回最后一个状态。显然我的代码有问题,因为这种解决方法适用于 chrome 和 firefox。

4

0 回答 0