jquery 如何控制浏览器重新加载事件

mrfwxfqh  于 5个月前  发布在  jQuery
关注(0)|答案(1)|浏览(83)

我正在开发一个培训管理系统。我想在考试页面重新加载之前通知我的学生。例如,如果学生在开始考试后想要重新加载页面,他会收到警报(甜蜜警报我想).如果有学生想强行重新加载页面,考试表格会自动提交.我成功阻止【禁用右键键盘重新加载].但我不能阻止页面重新加载通过点击浏览器重新加载按钮或url命中.所以有没有办法显示警报消息,并得到确认之前,页面重新加载使用JavaScript或jquery或laravel或php?
我尝试了beforeunload事件。下面是我的HTML代码:

<input type="text" name="username" id="name" placeholder="Username">

字符串
下面是我的JS代码:

const beforeUnloadHandler = (event) => {
        
        // Recommended
        event.preventDefault();

        // Included for legacy support, e.g. Chrome/Edge < 119
        event.returnValue = true;

Swal.fire({
            title: "Are you sure?",
            text: "You won't be able to revert this!",
            icon: "warning",
            showCancelButton: true,
            confirmButtonColor: "#3085d6",
            cancelButtonColor: "#d33",
            confirmButtonText: "Yes, delete it!"
        }).then((result) => {
            if (result.isConfirmed) {
                $.ajax({
            url: "controller.php",
            method: "GET",
            success: function (response) {
                console.log(response);    
            }
        })
            }
        });

    };
// works first
        // $.ajax({
        //     url: "controller.php",
        //     method: "GET",
        //     success: function (response) {
        //         console.log(response);
        //     }
        // })

    const nameInput = document.querySelector("#name");

    nameInput.addEventListener("input", (event) => {
        if (event.target.value !== "") {

            window.addEventListener("beforeunload", beforeUnloadHandler);
        } else {
            window.removeEventListener("beforeunload", beforeUnloadHandler);
        }
    });


但问题是在浏览器中显示警报之前执行警报请求,点击离开页面或取消按钮后显示甜蜜警报。我想在警报显示并确认后调用警报请求。我该怎么做?
这对我来说是一个很大的帮助。对不起,我的英语不好。提前感谢。
我尝试了beforeunload事件。下面是我的HTML代码:

<input type="text" name="username" id="name" placeholder="Username">


下面是我的JS代码:

const beforeUnloadHandler = (event) => {
        
        // Recommended
        event.preventDefault();

        // Included for legacy support, e.g. Chrome/Edge < 119
        event.returnValue = true;

Swal.fire({
            title: "Are you sure?",
            text: "You won't be able to revert this!",
            icon: "warning",
            showCancelButton: true,
            confirmButtonColor: "#3085d6",
            cancelButtonColor: "#d33",
            confirmButtonText: "Yes, delete it!"
        }).then((result) => {
            if (result.isConfirmed) {
                $.ajax({
            url: "controller.php",
            method: "GET",
            success: function (response) {
                console.log(response);    
            }
        })
            }
        });

    };
// works first
        // $.ajax({
        //     url: "controller.php",
        //     method: "GET",
        //     success: function (response) {
        //         console.log(response);
        //     }
        // })

    const nameInput = document.querySelector("#name");

    nameInput.addEventListener("input", (event) => {
        if (event.target.value !== "") {

            window.addEventListener("beforeunload", beforeUnloadHandler);
        } else {
            window.removeEventListener("beforeunload", beforeUnloadHandler);
        }
    });

vyu0f0g1

vyu0f0g11#

你不能自定义模式当用户刷新或点击后退按钮,但只有一个默认的确认框,你可以显示这样的

window.addEventListener("beforeunload", function (e) {
         e.preventDefault();
         e.returnValue = ""
      });
      window.addEventListener("unload", function (e) {
         $.ajax({
        url: "controller.php",
        method: "GET",
        success: function (response) {
            console.log(response);    
        }
      });

字符串

相关问题