当我们拥有POST表单数据时,如何使用javascript / jquery禁用浏览器后退按钮

时间:2019-03-23 11:42:27

标签: javascript browser back pushstate popstate

当用户在重力形式的第二页或已经具有POST数据时,我需要一种方法来禁用浏览器的后退按钮或显示弹出窗口以供返回。

假设表单位于https://www.example.com/form/上,它有3个步骤。 在第1步中,如果用户提交数据,它将停留在/ form /页面上,但显示的内容来自于表单的第2步。 在此阶段,我想禁用“后退”按钮或询问用户是否要返回,但是这将删除步骤1中提交的数据。

我尝试使用popstate,并且当我们没有任何POST数据时(当用户从​​example.com/page/访问exmaple.com/form/时,它确实会在第一次访问表单或表单的第一步禁用后退按钮)尝试返回,它不能)

    window.addEventListener('popstate', function (event) {
        alert(event.state);
        history.pushState(null, null, document.URL);
    });  

在使用此代码时,警报显示为空,但如果是正常访问(没有POST数据),则警报不会停止返回,但是如果表单数据已提交,我需要一种方法来停止返回

我还尝试了以下代码:


    window.addEventListener('DOMContentLoaded', function(eventX){
    console.log("DOMContentLoaded done!");
      setTimeout(function(){
           console.log("beforeunload registered");
        window.onbeforeunload = function(){return backDisable()};
        window.addEventListener("beforeunload", function(){return backDisable();});

      },1000);

    });
function backDisable()
{
  return "show some warning here!";
} 

我设置了延迟,让其他东西加载。如果用户尝试访问网站上的其他页面,则此脚本可以正常工作,如果用户要离开该页面,则该脚本会显示弹出窗口,但是如果用户在第1步或第2步提交表单,该脚本也会显示弹出窗口(我可以对其进行排序)但是浏览器上的“后退”按钮仍然有效。

1 个答案:

答案 0 :(得分:0)

尝试使用window.history.forward()方法或onbeforeunload并在javascript中为用户返回警报以获取更多详细信息,请检查此问题(how to stop browser back button using javascript