web-dev-qa-db-fra.com

boîte de dialogue jQuery UI OnBeforeUnload

J'ai un petit problème. J'essaie de saisir l'événement OnUnLoad de la fenêtre et de poser une question de confirmation. Si l'utilisateur décide de rester, cela ne pose pas de problème, et s'il veut quitter la page, il perdra toutes les données non enregistrées. Voici les problèmes ...

J'utilise un dialogue jQuery UI Dialog et lorsque je mets le code suivant sur ma page, le dialogue est ouvert et lorsque je clique sur le bouton Précédent du navigateur, la boîte de dialogue n'apparaît jamais. Cela actualise simplement la page:

<script type="text/javascript"> 
    $(window).bind('beforeunload', function() { 
            alert('you are an idiot!'); 
        } 
    );
</script>

Et la solution que j'utilise était un post ici . Encore une fois, la boîte de dialogue va s'afficher correctement si je n'ai pas ouvert la boîte de dialogue jQuery UI. Si je le fais, alors la msgbox n’est pas affichée, elle est simplement rafraîchie.

Des idées?

64
clockwiseq

La manière correcte d'afficher l'alerte consiste simplement à renvoyer une chaîne. N'appelez pas la méthode alert() vous-même.

<script type="text/javascript">
    $(window).on('beforeunload', function() {
        if (iWantTo) {
            return 'you are an idiot!';
        }
    }); 
</script>

Voir aussi: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

111
Jordan Ryan Moore

Vous pouvez également faire une exception pour quitter la page en soumettant un formulaire particulier:

$(window).bind('beforeunload', function(){
    return "Do you really want to leave now?";
});

$("#form_id").submit(function(){
    $(window).unbind("beforeunload");
});
43
Tomáš Mleziva

ça marche pour moi

$(window).bind('beforeunload', function() {
      return 'Do you really want to leave?' ;
});
14
lndr

Cela fonctionne pour moi:

window.addEventListener("beforeunload", function(event) {
  event.returnValue = "You may have unsaved Data";
});

1
Nate

l'API jQuery dit spécifiquement de ne pas se lier à beforeunload, mais doit plutôt se lier directement à window.onbeforeunload.

1
Thomas

Pour ASP.NET MVC si vous souhaitez créer une exception pour quitter la page en soumettant un formulaire particulier:

Définir un identifiant de formulaire:

@using (Html.BeginForm("Create", "MgtJob", FormMethod.Post, new { id = "createjob" }))
{
  // Your code
}



<script type="text/javascript">

  // Without submit form
   $(window).bind('beforeunload', function () {
        if ($('input').val() !== '') {
            return "It looks like you have input you haven't submitted."
        }
    });

    // this will call before submit; and it will unbind beforeunload
    $(function () {
        $("#createjob").submit(function (event) {
            $(window).unbind("beforeunload");
        });
    });

</script>
0
atik sarker