用户提交表单时如何禁用 beforeunload 操作?

IT技术 javascript jquery ajax onbeforeunload
2021-02-27 19:03:23

我有一小段代码:

<script>
$(window).bind('beforeunload', function() {
  $.ajax({
    async: false,
    type: 'POST',
    url: '/something'
    });
  });
</script>

我想知道,当用户点击提交按钮时,我怎么能禁用这个请求。

基本上就像这里的东西,在 SO 上。当您提出问题并决定关闭页面时,您会看到一个警告窗口,但在您提交表单时不会发生这种情况。

6个回答

unbind使用beforeunload事件处理程序调用

$('form#someForm').submit(function() {
   $(window).unbind('beforeunload');
});

为了防止表单被提交,添加以下行:

   return false;
添加以下行:return false;,但是我在哪里添加该行?
2021-04-17 19:03:23
$(window).unbind('beforeunload'); 如下所述向我抛出错误 Uncaught SyntaxError: Unexpected token '.' 但是绑定在 $(window).bind('beforeunload', function(){return 'Are you sure you want to leave?';});
2021-04-20 19:03:23

利用

$('form').submit(function () {
    window.onbeforeunload = null;
});

在主要提交功能之前,请确保您有这个!(如果有的话)

对我来说这有效,而 Jacob Relkin 的回答没有
2021-05-16 19:03:23

这是我们使用的:

在文档准备好后,我们调用 beforeunload 函数。

$(document).ready(function(){
    $(window).bind("beforeunload", function(){ return(false); });
});

在任何提交或 location.reload 之前,我们取消绑定变量。

$(window).unbind('beforeunload');
formXXX.submit();

$(window).unbind("beforeunload"); 
location.reload(true);

寻找 Detect onbeforeunload for ASP.NET web application 很好,如果页面上的某些输入控件发生更改,我必须显示警告消息,使用 ASP.NET 与母版页和内容页。我在母版页上使用了 3 个内容占位符,最后一个在表单之后

<form runat="server" id="myForm">

所以在表单结束标记之后和正文结束标记之前使用这个脚本

<script>
        var warnMessage = "Save your unsaved changes before leaving this page!";
        $("input").change(function () {
            window.onbeforeunload = function () {
                return 'You have unsaved changes on this page!';
            }
        });
        $("select").change(function () {
            window.onbeforeunload = function () {
                return 'You have unsaved changes on this page!';
            }
        });
        $(function () {
            $('button[type=submit]').click(function (e) {
                window.onbeforeunload = null;
            });
        });
    </script>

就绑定而言, beforeunload 不能以这种方式可靠地工作。你应该本地分配它

所以我让它像这样绑定和解除绑定对我来说也不起作用随着 jQuery 1.7 以后事件 API 已经更新,.bind()/.unbind() 仍然可用于向后兼容,但首选方法是使用 on()/off() 函数。

 <!DOCTYPE html>
 <html>
  <head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <script type="text/javascript" src="http://cdn.jsdelivr.net/jquery.dirtyforms/2.0.0-beta00006/jquery.dirtyforms.min.js"></script>
  <script type="text/javascript">
    $(function() {
        $('#form_verify').dirtyForms();
    })
  </script>
  <title></title>
 <body>
<form id="form_verify" action="a.php" method="POST">
    Firt Name <input type="text">
    Last Name <input type="file">
    <input type="submit">   
</form>