Javascript 若用户由于第二个处理程序中的对话框而停留在页面上,则在卸载处理程序之前跳过

Javascript 若用户由于第二个处理程序中的对话框而停留在页面上,则在卸载处理程序之前跳过,javascript,jquery,onbeforeunload,Javascript,Jquery,Onbeforeunload,我有一个beforeunload处理程序,当用户实际离开页面时调用该处理程序: $(window).on("beforeunload", function () { cleanup(); }); 然而,我的应用程序的另一部分可能会添加另一个beforeunload处理程序,该处理程序会询问用户是否真的因为正在进行的操作而想要离开: $(window).on("beforeunload", function () { return "Do you really want to l

我有一个beforeunload处理程序,当用户实际离开页面时调用该处理程序:

$(window).on("beforeunload", function () {
    cleanup();
});
然而,我的应用程序的另一部分可能会添加另一个beforeunload处理程序,该处理程序会询问用户是否真的因为正在进行的操作而想要离开:

$(window).on("beforeunload", function () {
    return "Do you really want to leave";
});
我如何保证,第二个处理程序总是首先被调用,如果用户决定留在页面上,第一个处理程序不会被调用


我已经尝试使用
unload
事件。但这不起作用,因为它不会可靠地执行我的清理功能和该功能中的后端调用。

您可以使用window.confirm以防万一。如(伪代码)


这样,如果用户想要退出,它将进行清理。这行吗?>

试试这个:@IsmaelMiguel谢谢,但这个问题的答案对我来说都不管用。我不能使用超时,因为我必须在用户离开时做某事,而不是在他留下时。另外,我不能使用
unload
,因为它必须在我的清理功能中执行后端调用,并且使用
unload
有时不会执行此调用。你是对的。这些要求实际上是不同的。我没注意到。我真的很抱歉。谢谢你,但正如我所说的,我必须使用不同的处理程序,由我的应用程序的两个不同部分添加,我想把事情分开。所以问题是,如果我能确保调用这些处理程序的顺序,并且如果用户决定在对话框中停留在一个特定的处理程序中,我能阻止所有后续处理程序。那么,默认情况下,卸载时它会清理吗?你想要一个单独的处理程序让用户导航离开,只有当用户正在做某件事的时候?是的,清理应该在用户实际离开时执行,所以技术上是在卸载时执行。但是,卸载事件似乎不那么可靠,因此我需要在卸载之前使用。我的应用程序的一部分可能会开始录音,如果他真的想离开,如果他正在录制东西的话,他会要求使用。如果他决定留下来,就不应该要求进行全球清理。事实上,这似乎无论如何都不起作用。如果我在beforeunload处理程序中使用window.confirm,我看不到对话框。好的,让我看看。我仍然在猜测,如果我们能把它改成一个处理器,然后做相应的事情。给我一点时间:)
$(window).on("beforeunload", function () {
 var result = window.confirm('Do you really want to quit?');
 if (result) {
  cleanup();
 }
}