Maison >interface Web >js tutoriel >Comment puis-je détecter de manière fiable la fermeture d'une fenêtre/d'un onglet du navigateur sans déclencher lors de la soumission de formulaires ?
Q : Capture de l'événement de fermeture de la fenêtre/de l'onglet du navigateur
J'aimerais capturez l'événement de fermeture de la fenêtre/de l'onglet du navigateur, mais l'événement jQuery "beforeunload" se déclenche également lors des soumissions de formulaire. Comment puis-je limiter l'événement aux fermetures de fenêtres ?
A : Isolation de l'événement de fermeture de fenêtre
Bien que "beforeunload" détecte tout départ de page, nous pouvons exclure les soumissions de formulaires et les hyperliens en utilisant 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 jQuery < 1.7 :
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; });
Remarque : Cette solution empêche l'invite de confirmation si un autre gestionnaire d'événements annule la soumission ou la navigation. Pour résoudre ce problème, enregistrez l'heure des événements de soumission/clic et vérifiez si « avant le déchargement » se produit plus de quelques secondes plus tard.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!