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 livemé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 submitet clickévénements, et vérifier si le beforeunloadproduit plus que quelques secondes plus tard.