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:
// Enable navigation prompt
window.onbeforeunload = function() {
return true;
};
// Remove navigation prompt
window.onbeforeunload = null;
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éfinir returnValue
l'événement au lieu de simplement renvoyer une chaîne:
var confirmOnPageExit = function (e)
{
// If we haven't been passed the event get the window.event
e = e || window.event;
var message = 'Any text will block the navigation and display a prompt';
// For IE6-8 and Firefox prior to version 4
if (e)
{
e.returnValue = message;
}
// For Chrome, Safari, IE8+ and Opera 12+
return message;
};
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:
// Turn it on - assign the function that returns the string
window.onbeforeunload = confirmOnPageExit;
// Turn it off - remove the function entirely
window.onbeforeunload = null;
Réponse originale (travaillé en 2009)
Pour l'allumer:
window.onbeforeunload = "Are you sure you want to leave?";
Pour le désactiver:
window.onbeforeunload = null;
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):
$('input').change(function() {
if( $(this).val() != "" )
window.onbeforeunload = "Are you sure you want to leave?";
});