在beforeunload上显示一个模态一段时间,然后离开页面?

时间:2018-06-26 23:29:00

标签: javascript jquery

我正在尝试在用户离开页面时显示一条带有消息的模式,我正在ajax调用成功时执行它,我的问题是,如果这种情况发生得太快,用户将没有时间阅读浏览器转到另一个页面之前出现的消息,这就是我的操作方式:

$(window).bind('beforeunload', function(event){
        // Setting some vars
        $.ajax({
            // Some ajax attrs
            beforeSend: function(){$("#partial_review_modal").modal('show')},
            success: function(){$("#partial_review_modal").delay(600).modal('hide')},
        }
    });
});

很明显,如果ajax调用返回的速度太快,则该消息将不会显示足够长的时间,并且.delay()不会在指定的时间内显示该消息,因为浏览器已经离开了另一个页面。

关于如何使浏览器等待一段时间才能离开的任何提示?

编辑:显示此模式的整个目的是通知用户已保存填写在表单中的数据,以便他以后可以返回并完成填写,这涉及将一些内容保存到我的数据库中(我将Django与Postgres结合使用)。我也想这样做,以使用户无法在ajax调用返回之前离开该页面,我认为这足以将对象保存到我的数据库中,但是显然这并不是因为当我再次加载页面时应该通过ajax调用删除的内容尚未删除,但是如果我刷新页面,这些内容实际上就消失了,这也增加了为什么我要在离开页面之前稍等一下

1 个答案:

答案 0 :(得分:0)

我不确定这是否是个好主意,但请尝试一下... 如何确保用户能够阅读消息? 给他任何他需要的时间... 我们要做的就是在方法的末尾添加一个用于默认浏览器确认的返回,就像这样:

$(window).bind("beforeunload",function() {
    $.ajax({
        // Some ajax attrs
        beforeSend: function(){$("#partial_review_modal").modal('show')},
        success: function(){$("#partial_review_modal").delay(600).modal('hide')}, 3000)},
        });

        return 'Are you sure you want to leave this page?'
});