jquery - 在 Firefox 和 IE 中使用 jquery 防止 onbeforeunload 警报

标签 jquery internet-explorer firefox onbeforeunload

当用户尝试离开页面时,我使用了 onbeforeunload 事件来显示默认警报框。

此对话框显示在我的“表单发布”操作中。

我使用了 event.preventDefault() (适用于除 Safari 之外的浏览器)和 return null 用于 Safari,以防止在表单发布操作中显示此对话框。但这在 Firefox 和 IE 中不起作用。

下面是jquery代码示例

if (!isSafari) {
        window.addEventListener("beforeunload", function (event) {
            if (!hideDefaultAlert) {
                event.returnValue = "Your unsaved changes will be lost";
            } else {
                event.preventDefault();
                hideDefaultAlert = false;
            }
        });
    } else if (isSafari) {
        $(window).on("beforeunload", function () {
            if (!hideDefaultAlert) {
                return "Your unsaved changes will be lost";
            } else {
                hideDefaultAlert = false;
                return null;
            }           
        });
    }

请为此提供解决方案,以防止 Firefox 和 Safari 中出现此警报。

提前致谢。

最佳答案

如果浏览器不是Safari并且表单没有改变,则不需要显示对话框。因此,请尝试按如下方式修改您的代码(删除 event.preventDefault()):

        var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor") > 0;
        var hideDefaultAlert = true;
        if (!isSafari) {
            alert("not safari");
            window.addEventListener("beforeunload", function (event) {
                if (!hideDefaultAlert) {
                    event.returnValue = "Your unsaved changes will be lost";
                } else {
                    //event.preventDefault(); //remove this line
                    hideDefaultAlert = false;
                }
            });
        }

关于jquery - 在 Firefox 和 IE 中使用 jquery 防止 onbeforeunload 警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56393331/

相关文章:

internet-explorer - 让 powershell 进入 ie 类,并在 ui 测试期间截取 ie 窗口的屏幕截图

html - Firefox 破坏标题并添加随机字符

android - 添加翻译时播放开发者控制台 "An unexpected error occurred. Please try again later."

html - 在 IE、Chrome、Safari 中显示时在 Firefox 中具有绝对位置的 IMG 不可见 - 为什么?

javascript - JQuery Knockout ComputedObservable Write 没有被 ObservableArray 调用

jquery - 将数组传递给 typeahead Bootstrap

javascript - 使用 Fetch GET 请求设置查询字符串

javascript - "click"事件调用外部函数而不是作用域函数。这本质上就像将内联 javascript 附加到 dom 吗?

html - CSS 在 IE 中搞砸了(就像一半的 CSS 没有加载)

javascript - 隐藏的文本区域填充在 IE 11 中不起作用