我希望用户确认他想离开页面。我用 jQuery 这样做:
$(window).bind('beforeunload', function(){
return "Are you sure?";
});
如果用户说“是”,我想在浏览器选项卡关闭之前运行一个发出 ajax 请求以保存一些数据的函数。这可能吗?在那种情况下怎么办?
我希望用户确认他想离开页面。我用 jQuery 这样做:
$(window).bind('beforeunload', function(){
return "Are you sure?";
});
如果用户说“是”,我想在浏览器选项卡关闭之前运行一个发出 ajax 请求以保存一些数据的函数。这可能吗?在那种情况下怎么办?
你问的是不可能的。 beforeunload
不允许您进行自己的提示,然后根据问题的回答方式进行分支。它只允许您运行代码或返回一个提示字符串,该字符串简单地确定用户是否离开页面。
在您的特定情况下,我建议您在收到此回调时始终保存数据(如文字处理器中的自动保存)。如果用户选择留在页面上并进行更多更改,您可以稍后在他们离开页面时再次保存数据的新状态。您必须仔细测试几个浏览器,以确保在处理程序中启动的 ajax 调用beforeunload
将正确完成。看起来应该,但浏览器之间可能存在实现差异。
仅供参考,之所以beforeunload
如此严格是因为它必须防止恶意网页滥用,这些网页会阻止您在需要时离开他们的网站。
正如 jfriend00 提到的那样,您尝试做的事情是不可能的。不过,当他们按下后退按钮时,你最好保持悲观。我的意思是:
$(window).bind('beforeunload', function(){
$.ajax({
//Do ajax call to save
});
return "Are you sure?";
});
这样做的目的是希望为您的 ajax 调用留出时间,并将新数据通知服务器。我说希望是因为当您离开页面时浏览器会终止所有请求。
另一件要记住的事情,当用户强行关闭浏览器时,这不会被触发。