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

Din*_*h M 5 firefox jquery internet-explorer onbeforeunload

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

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

我曾经使用过event.preventDefault()(对于return nullSafari 浏览器除外的浏览器)和Safari,以防止在Form post操作中显示此对话框。但这在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;
            }           
        });
    }
Run Code Online (Sandbox Code Playgroud)

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

提前致谢。

Din*_*h M 1

解决方案是,需要替换event.preventDefault()event.stopPropagation()return undefined。该解决方案适用于所有浏览器。

if (!isSafari) {
        window.addEventListener("beforeunload", function (event) {
            if (!hideDefaultAlert) {
                event.returnValue = "Your unsaved changes will be lost";
            } else {
                event.stopPropagation();
                hideDefaultAlert = false;
                return undefined;
            }
        });
    } else if (isSafari) {
        $(window).on("beforeunload", function () {
            if (!hideDefaultAlert) {
                return "Your unsaved changes will be lost";
            } else {
                hideDefaultAlert = false;
                return null;
            }           
        });
    }
Run Code Online (Sandbox Code Playgroud)