L' beforeunload
événement se déclenche chaque fois que l'utilisateur quitte votre page pour une raison quelconque.
Par exemple, il sera déclenché si l'utilisateur soumet un formulaire, clique sur un lien, ferme la fenêtre (ou l'onglet) ou accède à une nouvelle page à l'aide de la barre d'adresse, de la zone de recherche ou d'un signet.
Vous pouvez exclure les soumissions de formulaire et les liens hypertexte (à l'exception d'autres cadres) avec le code suivant:
var inFormOrLink;
$('a').on('click', function() { inFormOrLink = true; });
$('form').on('submit', function() { inFormOrLink = true; });
$(window).on("beforeunload", function() {
return inFormOrLink ? "Do you really want to close?" : null;
})
Pour les versions de jQuery antérieures à 1.7, essayez ceci:
var inFormOrLink;
$('a').live('click', function() { inFormOrLink = true; });
$('form').bind('submit', function() { inFormOrLink = true; });
$(window).bind("beforeunload", function() {
return inFormOrLink ? "Do you really want to close?" : null;
})
La live
méthode ne fonctionne pas avec l' submit
événement, donc si vous ajoutez un nouveau formulaire, vous devrez également lier le gestionnaire à celui-ci.
Notez que si un autre gestionnaire d'événements annule la soumission ou la navigation, vous perdrez l'invite de confirmation si la fenêtre est effectivement fermée plus tard. Vous pouvez résoudre ce problème en enregistrant le temps dans les submit
et click
événements, et vérifier si le beforeunload
produit plus que quelques secondes plus tard.