如何捕获浏览器窗口关闭事件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我想捕获浏览器窗口/选项卡关闭事件。我在jQuery中尝试了以下几种方法:

jQuery(window).bind(
    "beforeunload", 
    function() { 
        return confirm("Do you really want to close?") 
    }
)

但它也识别了表格提交,这不是我想要的。我想要一个只在用户关闭窗口时触发的事件。

提问于
用户回答回答于

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事件处理程序中解绑beforeunload事件:

jQuery('form').submit(function() {
    jQuery(window).unbind("beforeunload");
    ...
});

扫码关注云+社区