El beforeunload
se déclenche lorsque l'utilisateur quitte votre page pour une raison quelconque.
Par exemple, elle sera déclenchée si l'utilisateur soumet un formulaire, clique sur un lien, ferme la fenêtre (ou l'onglet) ou se rend sur une nouvelle page en utilisant la barre d'adresse, le champ de recherche ou un signet.
Vous pourriez exclure les soumissions de formulaires et les hyperliens (sauf ceux provenant 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;
})
El live
ne fonctionne pas avec la méthode submit
Ainsi, si vous ajoutez un nouveau formulaire, vous devrez également lier le gestionnaire à celui-ci.
Notez que si un autre gestionnaire d'événements annule l'envoi ou la navigation, vous perdrez l'invite de confirmation si la fenêtre est effectivement fermée ultérieurement. Vous pouvez remédier à cela en enregistrant l'heure dans le champ submit
y click
et de vérifier si le beforeunload
se produit plus de deux secondes plus tard.