Ici, dans stackoverflow, si vous avez commencé à apporter des modifications, vous essayez de quitter la page, un bouton de confirmation javascript apparaît et vous demande: "Êtes-vous sûr de vouloir quitter cette page?" blee blah bloo ...
Quelqu'un a-t-il déjà implémenté cela, comment puis-je suivre que les modifications ont été validées? Je crois que je pourrais le faire moi-même, j'essaie d'apprendre les bonnes pratiques de vous les experts.
J'ai essayé ce qui suit mais ne fonctionne toujours pas:
<html>
<body>
<p>Close the page to trigger the onunload event.</p>
<script type="text/javascript">
var changes = false;
window.onbeforeunload = function() {
if (changes)
{
var message = "Are you sure you want to navigate away from this page?\n\nYou have started writing or editing a post.\n\nPress OK to continue or Cancel to stay on the current page.";
if (confirm(message)) return true;
else return false;
}
}
</script>
<input type='text' onchange='changes=true;'> </input>
</body>
</html>
Quelqu'un peut-il poster un exemple?
javascript
html
message
onbeforeunload
confirm
Shimmy Weitzhandler
la source
la source
Réponses:
Mise à jour (2017)
Les navigateurs modernes considèrent désormais l'affichage d'un message personnalisé comme un risque pour la sécurité et il a donc été supprimé de tous. Les navigateurs affichent désormais uniquement les messages génériques. Puisque nous n'avons plus à nous soucier de définir le message, c'est aussi simple que:
Lisez ci-dessous pour la prise en charge du navigateur existant.
Mise à jour (2013)
La réponse originale convient à IE6-8 et FX1-3.5 (qui était ce que nous visions en 2009 quand elle a été écrite), mais est plutôt obsolète maintenant et ne fonctionnera pas dans la plupart des navigateurs actuels - je suis parti ci-dessous pour référence.
Le
window.onbeforeunload
n'est pas traité de manière cohérente par tous les navigateurs. Il devrait s'agir d'une référence de fonction et non d'une chaîne (comme indiqué dans la réponse d'origine), mais cela fonctionnera dans les anciens navigateurs, car la plupart d'entre eux semblent vérifier si quelque chose est attribuéonbeforeunload
(y compris une fonction qui renvoienull
).Vous définissez
window.onbeforeunload
une référence de fonction, mais dans les navigateurs plus anciens, vous devez définirreturnValue
l'événement au lieu de simplement renvoyer une chaîne:Vous ne pouvez pas faire
confirmOnPageExit
effectuer la vérification et retourner null si vous voulez que l'utilisateur continue sans le message. Vous devez toujours supprimer l'événement pour l'activer et le désactiver de manière fiable:Réponse originale (travaillé en 2009)
Pour l'allumer:
Pour le désactiver:
Gardez à l'esprit que ce n'est pas un événement normal - vous ne pouvez pas vous y lier de manière standard.
Pour vérifier les valeurs? Cela dépend de votre cadre de validation.
Dans jQuery, cela pourrait être quelque chose comme (exemple très basique):
la source
$("#submit_button").click(function() { window.onbeforeunload = null; });
. À l'origine, j'ai utilisé l'événement onclick du bouton, mais en plus d'être moins agréable, cela ne fonctionnait pas non plus avec IE8.window.onbeforeunload
événement.Le
onbeforeunload
Microsoft-isme est la chose la plus proche que nous ayons d'une solution standard, mais sachez que la prise en charge du navigateur est inégale; Par exemple, pour Opera, cela ne fonctionne que dans la version 12 et les versions ultérieures (toujours en version bêta au moment de la rédaction).De plus, pour une compatibilité maximale , vous devez faire plus que simplement renvoyer une chaîne, comme expliqué sur le Mozilla Developer Network .
Exemple: Définissez les deux fonctions suivantes pour activer / désactiver l'invite de navigation (cf. l'exemple MDN):
Définissez ensuite un formulaire comme celui-ci:
De cette façon, l'utilisateur ne sera averti de la navigation que s'il a modifié la zone de texte et ne sera pas invité lorsqu'il soumettra le formulaire.
la source
Pour que cela fonctionne dans Chrome et Safari, vous devez le faire comme ceci
Référence: https://developer.mozilla.org/en/DOM/window.onbeforeunload
la source
Avec JQuery ce truc est assez facile à faire. Puisque vous pouvez vous lier à des ensembles.
Ce n'est PAS suffisant pour faire le onbeforeunload, vous voulez seulement déclencher la navigation si quelqu'un a commencé à éditer des trucs.
la source
'beforeunload' de jquerys a très bien fonctionné pour moi
la source
pour les nouvelles personnes qui recherchent une solution simple, essayez simplement Areyousure.js
la source
C'est un moyen simple de présenter le message si des données sont entrées dans le formulaire, et de ne pas afficher le message si le formulaire est envoyé:
la source
Pour développer la réponse déjà étonnante de Keith :
Messages d'avertissement personnalisés
Pour autoriser les messages d'avertissement personnalisés, vous pouvez l'encapsuler dans une fonction comme celle-ci:
Appelez ensuite cette fonction avec votre message personnalisé:
Réactiver la navigation
Pour réactiver la navigation, il vous suffit de définir
window.onbeforeunload
surnull
. Le voici, enveloppé dans une petite fonction soignée qui peut être appelée n'importe où:Utilisation de jQuery pour le lier à des éléments de formulaire
Si vous utilisez jQuery, cela peut facilement être lié à tous les éléments d'un formulaire comme celui-ci:
Ensuite, pour permettre la soumission du formulaire:
Formes modifiées dynamiquement:
preventNavigation()
etenableNavigation()
peut être lié à toutes les autres fonctions selon les besoins, telles que la modification dynamique d'un formulaire, ou en cliquant sur un bouton qui envoie une demande AJAX. Je l'ai fait en ajoutant un élément d'entrée caché au formulaire:Ensuite, chaque fois que je veux empêcher l'utilisateur de s'éloigner, je déclenche la modification sur cette entrée pour m'assurer qu'elle
preventNavigation()
est exécutée:la source
Ici, essayez cela, cela fonctionne à 100%
la source
La norme indique que l'invite peut être contrôlée en annulant l' événement beforeunload ou en définissant la valeur de retour sur une valeur non nulle . Il indique également que les auteurs doivent utiliser Event.preventDefault () au lieu de returnValue, et le message affiché à l'utilisateur n'est pas personnalisable .
Au 69.0.3497.92, Chrome ne satisfaisait pas à la norme. Cependant, un rapport de bogue a été déposé et un examen est en cours. Chrome requiert que returnValue soit défini par référence à l'objet événement, et non à la valeur renvoyée par le gestionnaire.
Il est de la responsabilité de l'auteur de vérifier si des modifications ont été apportées; cela peut être fait avec une variable ou en s'assurant que l'événement n'est géré que lorsque cela est nécessaire.
la source
Lorsque l'utilisateur commence à apporter des modifications au formulaire, un indicateur booléen est défini. Si l'utilisateur tente ensuite de s'éloigner de la page, vous vérifiez cet indicateur dans l' événement window.onunload . Si l'indicateur est défini, vous affichez le message en le renvoyant sous forme de chaîne. Le retour du message sous forme de chaîne fera apparaître une boîte de dialogue de confirmation contenant votre message.
Si vous utilisez ajax pour valider les modifications, vous pouvez définir l'indicateur
false
après que les modifications ont été validées (c'est-à-dire dans l'événement de réussite ajax).la source
Vous pouvez ajouter un
onchange
événement sur la zone de texte (ou tout autre champ) qui définit une variable dans JS. Lorsque l'utilisateur tente de fermer la page (window.onunload), vous vérifiez la valeur de cette variable et affichez l'alerte en conséquence.la source
alert
etconfirm
êtes bloqué pendantwindow.onbeforeunload
etwindow.onunload
(au moins dans la version de Chrome sur mon PC, mais probablement aussi dans tous les navigateurs pour prendre en charge ces gestionnaires).Sur la base de toutes les réponses sur ce fil, j'ai écrit le code suivant et cela a fonctionné pour moi.
Si vous ne disposez que de quelques balises d'entrée / zone de texte qui nécessitent la vérification d'un événement de déchargement, vous pouvez attribuer des attributs de données HTML5 comme
data-onunload="true"
par exemple.
et le Javascript (jQuery) peut ressembler à ceci:
la source
voici mon html
Et voilà comment j'ai fait quelque chose de similaire en javaScript
la source
Il peut être facilement fait en définissant une ChangeFlag true, le onChange cas de TextArea . Utilisez javascript pour afficher la boîte de dialogue de confirmation basée sur la valeur ChangeFlag . Jetez le formulaire et accédez à la page demandée si la confirmation est vraie, sinon ne faites rien .
la source
Ce que vous souhaitez utiliser est l'événement onunload en JavaScript.
Voici un exemple: http://www.w3schools.com/jsref/event_onunload.asp
la source
Il y a un paramètre "onunload" pour la balise body que vous pouvez appeler à partir de là. S'il renvoie faux, il empêche la navigation.
la source
<body onunload="return false;">
.