Mise à jour (2017)
Les navigateurs modernes considèrent désormais l'affichage d'un message personnalisé comme un risque pour la sécurité. supprimé de tous. Les navigateurs n'affichent plus que des messages génériques. Puisque nous n'avons plus à nous préoccuper de la définition du message, il est aussi simple que :
// Enable navigation prompt
window.onbeforeunload = function() {
return true;
};
// Remove navigation prompt
window.onbeforeunload = null;
Lisez ci-dessous pour le support des anciens navigateurs.
Mise à jour (2013)
La réponse originale est adaptée à IE6-8 et FX1-3.5 (ce que nous visions en 2009 lorsqu'elle a été rédigée), mais elle est plutôt dépassée maintenant et ne fonctionnera pas dans la plupart des navigateurs actuels - je l'ai laissée ci-dessous pour référence.
El 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 de caractères (comme l'indiquait la réponse originale), mais cela fonctionnera dans les navigateurs plus anciens, car la vérification de la plupart d'entre eux semble consister à savoir si quelque chose est affecté à onbeforeunload
(y compris une fonction qui renvoie null
).
Vous mettez window.onbeforeunload
à une référence de fonction, mais dans les navigateurs plus anciens, vous devez définir l'attribut returnValue
de l'événement au lieu de renvoyer simplement une chaîne de caractères :
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;
};
Tu ne peux pas avoir ça confirmOnPageExit
effectue la vérification et renvoie 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ée en 2009)
Pour l'allumer :
window.onbeforeunload = "Are you sure you want to leave?";
Pour l'éteindre :
window.onbeforeunload = null;
Gardez à l'esprit qu'il ne s'agit pas d'un événement normal - vous ne pouvez pas vous lier à lui de la manière habituelle.
Pour vérifier les valeurs ? Cela dépend de votre cadre de validation.
En 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?";
});
3 votes
Pour que votre exemple fonctionne, changez la fonction en : myFunction() { window.onbeforeunload = "message" ; } puis changez l'entrée : <input type='text' onchange='myFunction();'></input>
0 votes
En rapport : stackoverflow.com/q/821011/435605