72 votes

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

Personne ne sait comment arrêter une page de rechargement ou de naviguer à l'extérieur?


jQuery(function($) {

    /* global on unload notification */
    warning = true;

    if(warning) {
    	$(window).bind("unload", function() { 
    		if (confirm("Do you want to leave this page") == true) {
    			//they pressed OK
    			alert('ok');
    		} else {
    			// they pressed Cancel
    			alert('cancel');
    			return false;
    		}
    	});
    }
});

Je suis en train de travailler sur un site de e-commerce à l'heure actuelle, la page qui affiche vos futures commandes a la capacité de modifier la quantité des articles commandés à l'aide touches+/ -. La modification de la quantité de cette façon, cela ne change en fait l'ordre lui-même, ils doivent appuyer sur confirmer, et donc de commettre une action positive pour changer l'ordre.

Toutefois, si ils ont changé les quantités et naviguez à partir de la page je voudrais avertir qu'ils le font dans le cas où il s'agit d'un accident, de l'évolution des quantités seront perdues si elles naviguer loin ou actualisez la page.

Dans le code ci-dessus, je suis en utilisant une variable globale qui sera false par défaut (de son vrai uniquement pour les tests), lorsque la quantité est changé, je mettrai à jour cette variable pour être vrai, et quand ils confirmer les modifications, je vais le mettre à false.

Si l'avertissement est vraie et que la page est déchargé, je lui offre une boîte de confirmation, si ils le disent pas qu'ils aimeraient rester sur cette page, j'ai besoin d'arrêter de déchargement. return false n'est pas de travail, il continue permet à l'utilisateur de naviguer loin (les alertes sont là uniquement pour le débogage)

Des idées?

85voto

NickFitz Points 14977

onbeforeunload est celui que vous voulez; votre fonction "doit affecter une chaîne de valeur à la propriété returnValue de l'objet d'Événement et le retour de la même chaîne". Vérifiez la documentation de Microsoft et Mozilla pour plus de détails.

La chaîne de retour ne pourra être utilisé par le navigateur pour présenter à l'utilisateur personnalisé de la boîte de confirmation, ce qui leur permet de refuser d'y rester s'ils le souhaitent. Il doit être fait de cette façon pour éviter de scripts malveillants provoquant un Déni de l'attaque du Navigateur.

71voto

crafter Points 2304

Ce code avertit selon la suggestion de Natalie, mais le désactive 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;
});
 

20voto

scunliffe Points 30964

vous voulez utiliser l'événement onbeforeunload .

-4voto

MathieuK Points 2888

Essayez d’utiliser e.preventDefault() au lieu de retourner false. 'e' serait le premier argument de votre rappel de déchargement .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X