javascript - 单页应用程序中的历史记录.pushState/后退按钮/导航

标签 javascript jquery html singlepage

我正在构建一个带有导航的小型单页应用程序。这些页面位于 div 容器中,通过单击链接显示。页面更改的代码

        // show the given page, hide the rest
        function show(elementID) {
            history.pushState({ 
                plate_id: 1, 
                plate: elementID 
            }, null, elementID);
            goTo(elementID);
        }
        function goTo(elementID) {
            var ele = document.getElementById(elementID);
            if (!ele) {
                console.log("fail");
                return;
            }
            // get all pages, loop through them and hide them
            var pages = document.getElementsByClassName('page');

            for(var i = 0; i < pages.length; i++) {
                pages[i].style.display = 'none';
            }
            // then show the requested page
            ele.style.display = 'block';
        }
        window.onpopstate = function (event) {  
              var content = "";
              if(event.state) {
                content = event.state.plate;
              }
              if (content != '') goTo(content);
        }

链接看起来像

<a href="#" onclick="show('Page_1');" id="1">page 1</a>

和 div

<div id="Page_1" class="page" style="">

现在,当我使用链接时,网址会更改为 .../Page_1# 或 .../Page_2# 并且直接显示页面。现在,如果我使用后退按钮(自己的或浏览器无关紧要),就会发生一些我不明白的魔法。

例如

  1. 点击第一个链接 -> 转到 ../Page_1#(直接,一切都很好)
  2. 点击第二个链接 -> 转到 ../Page_2#(直接,一切都很好)
  3. 使用后退按钮 -> 转到 ../Page_2(没有 #,什么也不会发生,但应该转到 Page_1???!!)
  4. 再次使用后退按钮 -> 转到 ../Page_1#(没有任何反应)
  5. 再次使用后退按钮 -> 转到 ../Page_1(第 1 页正在加载)

我不明白为什么第三步和第四步中的想法会发生!如果有人能帮助我那就太好了

最佳答案

也许您希望链接的 onclick 为:onclick="show('Page_1'); return false;"onclick="return show( 'Page_1');" 和您的显示函数以 return false; 结束。

通过返回 false,浏览器实际上不会遵循 href="#",而只是执行 JavaScript。

关于javascript - 单页应用程序中的历史记录.pushState/后退按钮/导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27236970/

相关文章:

html - 我似乎无法禁用滚动条

html - 两个很棒的字体箭头,一个在另一个之上,周围有一个圆圈

javascript - jQuery 点击被触发两次

javascript - jQuery 图像映射器 : Highlight Areas prior to selecting

javascript - 我的 JavaScript Post 和 Get 函数与 python 服务器发生故障

javascript - 来自对象的正则表达式

java - 如何解决JSOUP爬虫中目标标签删除问题

javascript - 如何查找具有特定数据属性值的元素

php - 如何使用 jquery 调用 cakephp 操作?

javascript - 如何使按钮在单击后保持 'active'?