每当用户出于任何原因离开您的页面时,beforeunload 事件就会触发。
例如,如果用户提交表单、单击链接、关闭窗口(或选项卡)或使用地址栏、搜索框或书签进入新页面,它将被触发。
您可以使用以下代码排除表单提交和超链接(其他框架除外):
var inFormOrLink;
$('a').on('click', function() { inFormOrLink = true; });
$('form').on('submit', function() { inFormOrLink = true; });
$(window).on("beforeunload", function() {
return inFormOrLink ? "Do you really want to close?" : null;
})
对于早于 1.7 的 jQuery 版本,试试这个:
var inFormOrLink;
$('a').live('click', function() { inFormOrLink = true; });
$('form').bind('submit', function() { inFormOrLink = true; });
$(window).bind("beforeunload", function() {
return inFormOrLink ? "Do you really want to close?" : null;
})
live 方法不适用于submit 事件,因此如果您添加新表单,您还需要将处理程序绑定到它。
请注意,如果不同的事件处理程序取消提交或导航,如果窗口稍后实际关闭,您将丢失确认提示。您可以通过记录submit 和click 事件中的时间并检查beforeunload 是否在几秒钟后发生来解决此问题。