Подтвердить что ты не робот

Как отключить действие beforeunload, когда пользователь отправляет форму?

У меня есть этот маленький кусок кода:

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

Интересно, как я могу отключить этот запрос, когда пользователь нажимает кнопку отправки.

В принципе что-то вроде здесь, на SO. Когда вы задаете вопрос и решаете закрыть страницу, вы получаете окно с предупреждением, но это не происходит, когда вы отправляете форму.

4b9b3361

Ответ 1

Вызовите unbind с помощью обработчика событий beforeunload:

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

Чтобы предотвратить отправку формы, добавьте следующую строку:

   return false;

Ответ 2

Использование

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

Удостоверьтесь, что у вас есть это, прежде чем вы начнете отправлять функции! (если есть)

Ответ 3

Это то, что мы используем:

В готовом документе мы вызываем функцию beforeunload.

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

Перед отправкой или location.reload мы отвязаем переменную.

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

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

Ответ 4

Ищете обнаружение onbeforeunload для веб-приложения ASP.NET, я был, Я должен показать предупреждающее сообщение, если какое-либо управление вводом изменяется на странице с помощью ASP.NET с главной страницей и страницами содержимого. Я использую 3 заполнителя содержимого на главной странице, а последний - после формы

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

поэтому после тега закрытия формы и перед тегом закрытия тела этот script

<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 не работает надежно таким образом, насколько привязка идет. Вы должны назначить его изначально

поэтому я начал работать так, как этот bind и unbind не сработали для меня. С jQuery 1.7 и далее API событий был обновлен..bind()/. unbind() все еще доступны для обратной совместимости, но предпочтительный метод использует функции on()/off().

Ответ 5

 <!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>

Ответ 6

если вы используете связывание, используйте это:

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

Это будет хорошо для всех форм отправки.