javascript - 如何在离开页面之前警告用户而不是重定向

标签 javascript jquery

我的网站上有一些页面允许用户创建和编辑帖子。当用户在这些页面上时,我想在离开页面之前警告他们。我可以这样做:

//Only warn if user is on a New or Edit page
if(window.location.href.indexOf("/new") !== -1 || window.location.href.indexOf("/edit") !== -1  {
            window.addEventListener('beforeunload', function (e) {
                e.preventDefault();
                e.returnValue = '';
            });

//Doing this again because I don't know which version is compataible with all browsers
            window.onbeforeunload = function (e) {
                e.preventDefault();
                e.returnValue = ''
            };
        };

NewEdit 页面上,form 中的信息使用 JQuery ajax 提交到服务器>。服务器返回一个 URL,用户被重定向到该 URL 以查看他们的帖子/更新的结果,如下所示 window.location.href = result; 其中 result 是发送的 URL从服务器返回。

当该代码运行进行重定向时,用户会收到警告,告知他们将要离开他们所在的页面。我不希望它在用户未执行的任何重定向/导航上执行此操作。在这种情况下如何停止/删除警告?

更新:这不是重复的。这个问题询问如何防止 beforeunload 事件发生在用户未请求自己离开页面的重定向上。

最佳答案

因为您可能希望在某些情况下绑定(bind)事件而不是同一 window 中的其他情况,所以您不仅需要将事件处理程序添加到 window,但是您也必须将其删除(在适当的情况下),因为即使您正在更改 window 中加载的 document 的 URL,您也没有更改窗口本身:

function handleBeforeUnload (e) {
  e.preventDefault();
  e.returnValue = '';
}

//Only warn if user is on a New or Edit page
if(location.href.indexOf("/new") !== -1 || location.href.indexOf("/edit") !== -1  {
   window.addEventListener('beforeunload', handleBeforeUnload);
} else {
   // Remove the previously registered event handler (if any)
   window.removeEventListener('beforeunload', handleBeforeUnload);
}

关于javascript - 如何在离开页面之前警告用户而不是重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55716197/

相关文章:

javascript - 将多个类型的 String 解析为 Number 时的错误值

javascript - "event"对象被识别而不通过它,在 javascript 函数中?

jquery - 如何使用 jQuery 在 Stripes 按钮上添加图标

javascript - 单击时在 div 中显示图像不起作用

javascript - 视频背景不起作用(html、css、js)

jquery - 新的 Twitter API - 他们说无法使用 ajax,但这行得通吗?

Javascript 回调丢失 'this'

javascript - JavaScript 与 Actionscript 2.0 和 3.0 之间通信的最佳方式是什么

javascript - 识别 Javascript 中的按钮按下事件

javascript - AddClass "active"其中Class与href相同,否则移除 "active"