有时仅在 window.onbeforeload 事件中显示确认消息?

问题描述 投票:0回答:0

当我的应用程序中有未保存的更改时,我想确保用户不会在没有看到确认对话框的情况下关闭窗口/选项卡。

我写了这个:

var _beforeWindowUnload = function(event) {
    if (documentHasUnsavedChanges()) {
        // document is dirty
        var message = "Unsaved changes will be lost";
        event.returnValue = message;
        return message;
    } else {
        // document is clean
        event.returnValue = null;
        return null;
    }
}

window.addEventListener('beforeunload', _beforeWindowUnload, false);

问题是当文档干净时我仍然看到带有“空”消息的对话框。我也尝试过

true
false
但没有运气。 我还尝试过在文档干净时不返回任何内容,但是当文档变脏时它不会显示消息。这很奇怪!

如何在仍然有事件监听器的情况下有选择地避免确认对话框?


注 1:MDN 说了以下但显然不是真的?:

当此事件返回非空值时,提示用户确认页面卸载。在大多数浏览器中,事件的返回值显示在这个对话框中。

注 2:这应该适用于相对较新的浏览器。

javascript dom-events
© www.soinside.com 2019 - 2024. All rights reserved.