首页 > web前端 > js教程 > 如何捕获浏览器窗口关闭事件而不干扰表单提交?

如何捕获浏览器窗口关闭事件而不干扰表单提交?

Susan Sarandon
发布: 2024-12-29 11:15:11
原创
439 人浏览过

How to Capture Browser Window Close Events without Form Submission Interference?

在没有表单干扰的情况下捕获浏览器窗口关闭事件

通常希望在浏览器窗口(或选项卡)关闭时专门触发一个事件。然而,通常用于此目的的 beforeunload 事件也会对表单提交做出反应。我们如何排除与表单相关的操作触发此事件?

答案:

每当用户离开当前页面时,无论出于何种原因,都会触发 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; 
})
登录后复制

在此解决方案中,当用户单击超链接或提交表单,则 inFormOrLink 标志设置为 true。在 beforeunload 事件期间,会检查此标志,如果为 false,则不会捕获该事件。

重要提示:

值得注意的是,其他事件处理程序可能会防止发生表单提交或导航。在这种情况下,窗口关闭时 beforeunload 事件仍会触发,从而导致确认提示丢失。为了缓解这种情况,记录点击和提交事件的时间,并检查 beforeunload 是否发生得晚得多,以便处理此类情况。

以上是如何捕获浏览器窗口关闭事件而不干扰表单提交?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板