Javascript 在modal上使用history和pushState/currentState时,“前进”按钮不工作

Javascript 在modal上使用history和pushState/currentState时,“前进”按钮不工作,javascript,jquery,browser-history,html5-history,Javascript,Jquery,Browser History,Html5 History,我使用历史记录和pushState/currentState来: 在触发模式时更改URL 如果按下“后退”按钮或“模式关闭”按钮,则关闭“模式关闭”按钮,然后 返回到上一个URL 如果modal已启动、关闭,且按下前进按钮,则重新打开 选择模式并转到模式URL 除了3个,其他都在工作。我有这个JS,但它似乎不起作用: window.addEventListener('popstate', function (e) { var state = history.state;

我使用历史记录和pushState/currentState来:

  • 在触发模式时更改URL
  • 如果按下“后退”按钮或“模式关闭”按钮,则关闭“模式关闭”按钮,然后 返回到上一个URL
  • 如果modal已启动、关闭,且按下前进按钮,则重新打开 选择模式并转到模式URL
  • 除了3个,其他都在工作。我有这个JS,但它似乎不起作用:

    window.addEventListener('popstate', function (e) {
            var state = history.state;
            // back button pressed. close popup
            if (!state) {
                $(".modal").css({ "display": "none" });
                $('body').css('position', 'relative');
            }
            else {
                dataModal = $(this).attr("data-modal");
                $("#" + dataModal).css({ "display": "flex" });
                $('body').css('position', 'fixed');
            }
        });
    


    任何帮助都将不胜感激。非常感谢。

    您的代码中有两个明显的问题:

  • dataModal=$(this.attr(“数据模式”)<代码>此
    在此上下文中指的是
    窗口
    对象,因为
    popstate
    事件注册在
    窗口
    上。
    窗口
    没有
    数据模式
    属性,因此
    数据模式===未定义

  • 当您在模态触发器事件中
    pushState
    时,您没有将模态id保存在任何位置

  • 可能的解决方案


    尝试执行类似于
    history.pushState({dataModal:dataModal},title,url)的操作。然后在popstate事件中,您可以执行
    var dataModal=e.state.dataModal
    来获取模式id。

    谢谢,完成了。