web-dev-qa-db-fra.com

Comment désactiver l'action beforeunload lorsque l'utilisateur soumet un formulaire?

J'ai ce petit morceau de code:

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

Je me demande comment je pourrais désactiver cette demande lorsque l'utilisateur clique sur le bouton d'envoi.

Fondamentalement, quelque chose comme ici, sur SO. Lorsque vous posez une question et décidez de fermer la page, vous obtenez une fenêtre d'avertissement, mais cela ne se produit pas lorsque vous soumettez le formulaire.

21
pawelmysior

Appelez unbind à l'aide du gestionnaire d'événements beforeunload:

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

Pour empêcher la soumission du formulaire, ajoutez la ligne suivante:

   return false;
36
Jacob Relkin

Utilisation

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

Assurez-vous de l'avoir avant de soumettre la fonction de soumission principale! (si seulement)

19
Parham

Voici ce que nous utilisons: 

Sur le document prêt, nous appelons la fonction beforeunload. 

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

Avant toute soumission ou location.reload, nous libérons la variable. 

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

$(window).unbind("beforeunload"); 
location.reload(true);
0
David
 <!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>

0
Anup Panwar

À la recherche de Detect onbeforeunload pour l’application Web ASP.NET, j’avais bien affiché . Je dois afficher un message d’avertissement si un contrôle de saisie est modifié sur la page en utilisant ASP.NET avec une page maître et une page de contenu. J'utilise 3 espaces réservés de contenu sur la page maître et le dernier est après le formulaire 

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

donc après la balise de fermeture de formulaire et avant la balise de fermeture du corps utilisé ce 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 ne fonctionne pas de manière fiable de la sorte, en ce qui concerne la liaison. Vous devriez l'attribuer en natif

donc jukuery 1.7 à partir de maintenant, l’API de l’événement a été mise à jour, .bind () /. unbind () reste disponible pour la compatibilité ascendante, mais la méthode préférée est en utilisant les fonctions on ()/off ().

0
dnxit