Comment puis-je empêcher une page de décharger (naviguer) dans JS?

Est-ce que quelqu'un sait comment empêcher une page de recharger ou de naviguer?

  JQuery (function ($) {

     / * Global lors de la notification de déchargement * /
     Avertissement = vrai;

     Si (avertissement) {
         $ (Fenêtre) .bind ("décharger", function () { 
             Si (confirmez ("Voulez-vous quitter cette page") == true) {
                 // ils ont appuyé sur OK
                 Alerte ('ok');
             } autre {
                 // ils ont appuyé Annuler
                 Alerte ('annuler');
                 Renvoyer faux;
             }
         });
     }
 }); 

Je travaille actuellement sur un site de commerce électronique, la page qui affiche vos futures commandes a la possibilité de modifier les quantités d'articles commandés à l'aide de boutons +/-. En modifiant les quantités de cette façon, cela ne modifie pas l'ordre lui-même, ils doivent appuyer sur confirmer et donc engager une action positive pour modifier l'ordre.

Cependant, s'ils ont changé les quantités et naviguent loin de la page, j'aimerais leur avertir qu'ils le font au cas où cela serait un accident, car les quantités modifiées seront perdues si elles naviguent ou actualisent la page.

Dans le code ci-dessus, j'utilise une variable globale qui sera fausse par défaut (elle est vraie pour le test). Lorsqu'une quantité est modifiée, je mettrai à jour cette variable pour être vraie et quand elles confirment les modifications, je la définirai comme fausse .

Si l'avertissement est vrai et que la page est déchargée, je leur offre une boîte de confirmation, s'ils disent qu'ils ne souhaitent pas rester sur cette page, je dois l'empêcher de décharger. Return false ne fonctionne pas, il permet encore à l'utilisateur de naviguer (les alertes sont là pour le débogage uniquement)

Des idées?

onbeforeunload est celle que vous voulez; Votre fonction "doit affecter une valeur de chaîne à la propriété returnValue de l'objet Event et renvoyer la même chaîne" . Vérifiez les documents de Microsoft et Mozilla pour plus de détails.

La chaîne que vous renvoyez sera utilisée par le navigateur pour présenter à l'utilisateur une boîte de confirmation personnalisée, ce qui lui permettra de refuser de rester là s'ils le choisissent. Cela doit être fait de manière à empêcher les scripts malveillants provoquant une attaque de déni de navigateur.

Ce code avertit selon la suggestion de Natalie, mais désactive l'avertissement si un formulaire sur la page a été soumis. Utilise JQuery.

 var warning = true; window.onbeforeunload = function() { if (warning) { return "You have made changes on this page that you have not yet confirmed. If you navigate away from this page you will lose your unsaved changes"; } } $('form').submit(function() { window.onbeforeunload = null; }); 

Vous souhaitez utiliser l'événement onbeforeunload .

 window.onbeforeunload = function() { if (warning) { return 'You have made changes on this page that you have not yet confirmed. If you navigate away from this page you will loose your unsaved changes'; } } 

N'est pas supporté en chrome, safari et opéra

 window.onbeforeunload = confirmExit; function confirmExit() { return "You have attempted to leave this page. If you have made any changes to the fields without clicking the Save button, your changes will be lost. Are you sure you want to exit this page?"; } 

Essayez d'utiliser e.preventDefault() au lieu de renvoyer faux. 'E' serait le premier argument pour votre rappel de déchargement .