Как предотвратить onbeforeunload от вызова при нажатии кнопки отправки

Как я могу предотвратить вызов onbeforeunload при нажатии кнопки отправки?

$(document).ready(function() 
 {
  $('input:text,input:checkbox,input:radio,textarea,select').one('change', function() 
  {
   //('BODY').attr('onbeforeunload',"return 'Leaving this page will cause any unsaved data to be lost.';");
   if(
   window.onbeforeunload = function() { return 'You have unsaved changes!'; }

  });

 });

Ответы

Ответ 1

Вы не можете предотвратить вызов unbeforeunload, но используя глобальную переменную флага, вы можете контролировать, выводит ли оно предупреждение.

в документе добавьте script:

warn_on_unload = "You have unsaved changes!"

в сообщении, добавьте:

warn_on_unload = "";

определение события, измените на:

window.onbeforeunload = function() { return warn_on_unload; }

через warn_on_unload, вы можете включить или выключить предупреждающее сообщение по своему усмотрению.

Ответ 2

Вот окончательный код:

$(document).ready(function() 
{
    var warn_on_unload="";
    $('input:text,input:checkbox,input:radio,textarea,select').one('change', function() 
    {
        warn_on_unload = "Leaving this page will cause any unsaved data to be lost.";

        $('#submit').click(function(e) { 
            warn_on_unload = "";}); 

            window.onbeforeunload = function() { 
            if(warn_on_unload != ''){
                return warn_on_unload;
            }   
        }
    });
});

Ответ 3

вы можете использовать .on() для привязки onbeforeunload, а затем использовать .off(), чтобы отвязать его в представлении формы, коротком и сладком

$(document).ready(function () {
    $(window).on('beforeunload', function(){
        return "You have unsaved changes!";
    });
    $(document).on("submit", "form", function(event){
        $(window).off('beforeunload');
    });
}

Ответ 4

Изменено: теперь игнорирует отправку формы

$(document).ready(function () {
var warn_on_unload = "";
$('input:text,textarea').on('change', function () {
    warn_on_unload = "Leaving this page will cause any unsaved data to be lost.";
    $("form").submit(function () {
        warn_on_unload = "";
    });
    window.onbeforeunload = function () {
        if (warn_on_unload != '') {
            return warn_on_unload;
        }
    }
});
});

Ответ 5

Если вы просто хотите отключить Onbeforeunload Event на кнопке submit. Итак, вот пример кода

document.getElementById('sub').onsubmit = function(e) {
 window.onbeforeunload = null;
 return true;
}

Но если вы хотите следить за изменениями форм и предупреждениями (окно подтверждения) перед тем, как покинуть страницу, тогда я вам предложат плагин вот один плагин jquery, который делает именно то, что я написал https://github.com/snikch/jquery.dirtyforms

Плагин Monitior. Формы изменений и предупреждения перед тем, как покинуть страницу

Лучшая часть "Он не будет показывать окно предупреждения при нажатии кнопки" Отправить "или" Отправить форму "

Пример кода: -

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