Maison >interface Web >js tutoriel >Comment puis-je détecter de manière fiable uniquement les événements de fermeture de fenêtre du navigateur en JavaScript ?
Événement de fermeture de la fenêtre du navigateur : un guide complet
jQuery propose l'événement "beforeunload" pour capturer le moment où un utilisateur tente de quitter un page web. Cependant, cet événement se déclenche non seulement pour les fermetures de fenêtres, mais également pour des actions telles que la soumission de formulaires. Pour résoudre ce problème, examinons les détails de la capture spécifique de l'événement de fermeture de la fenêtre du navigateur.
L'événement "beforeunload", comme son nom l'indique, se déclenche chaque fois que l'utilisateur quitte la page actuelle. Cela inclut les soumissions de formulaires, les clics sur les liens, la fermeture de la fenêtre ou de l'onglet et la navigation vers une nouvelle page par divers moyens.
Pour illustrer, considérons le code jQuery suivant :
jQuery(window).bind( "beforeunload", function() { return confirm("Do you really want to close?") } )
Pendant ce temps l'extrait de code tente de capturer l'événement de fermeture de la fenêtre, il déclenche également par inadvertance la boîte de dialogue de confirmation pour d'autres actions, telles que l'envoi de formulaires. Pour remédier à cette limitation, nous devons faire la différence entre les fermetures de fenêtres et les autres événements de navigation.
Une approche consiste à exclure les soumissions de formulaires et les hyperliens (à l'exclusion de ceux d'autres cadres) en utilisant le code jQuery 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; })
Dans ce code, nous suivons si l'utilisateur interagit actuellement avec un formulaire ou un lien en définissant la variable inFormOrLink sur true sur les actions pertinentes. Lors de l'événement "beforeunload", nous affichons l'invite de confirmation uniquement si l'utilisateur n'est pas actuellement dans un formulaire ou un lien.
Notez que cette approche peut rencontrer des problèmes si un autre gestionnaire d'événements annule la soumission ou la navigation, empêchant potentiellement l'invite de confirmation ne s'affiche pas même si la fenêtre est fermée. Pour atténuer ce problème, envisagez d'enregistrer l'heure des événements de soumission et de clic et de vérifier si l'événement « beforeunload » 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!