Update (2017)
Moderne Browser betrachten das Anzeigen einer benutzerdefinierten Nachricht jetzt als Sicherheitsrisiko und wurden daher von allen entfernt . Browser zeigen jetzt nur allgemeine Nachrichten an. Da wir uns nicht mehr um das Einstellen der Nachricht kümmern müssen, ist dies so einfach wie:
// Enable navigation prompt
window.onbeforeunload = function() {
return true;
};
// Remove navigation prompt
window.onbeforeunload = null;
Lesen Sie weiter unten, um Unterstützung für ältere Browser zu erhalten.
Update (2013)
Die ursprüngliche Antwort ist für IE6-8 und FX1-3.5 geeignet (auf die wir bereits 2009 abzielten, als sie geschrieben wurde), ist aber jetzt ziemlich veraltet und funktioniert in den meisten aktuellen Browsern nicht mehr - ich bin gegangen es unten als Referenz.
Das window.onbeforeunload
wird nicht von allen Browsern konsistent behandelt. Es sollte eine Funktionsreferenz und keine Zeichenfolge sein (wie in der ursprünglichen Antwort angegeben), aber das funktioniert in älteren Browsern, da die Prüfung für die meisten von ihnen zu sein scheint, ob etwas zugewiesen ist onbeforeunload
(einschließlich einer Funktion, die zurückgibt null
).
Sie haben window.onbeforeunload
eine Funktionsreferenz festgelegt, aber in älteren Browsern müssen Sie returnValue
das Ereignis festlegen, anstatt nur eine Zeichenfolge zurückzugeben:
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;
};
Sie können das nicht confirmOnPageExit
überprüfen lassen und null zurückgeben, wenn der Benutzer ohne die Nachricht fortfahren soll. Sie müssen das Ereignis noch entfernen, um es zuverlässig ein- und auszuschalten:
// Turn it on - assign the function that returns the string
window.onbeforeunload = confirmOnPageExit;
// Turn it off - remove the function entirely
window.onbeforeunload = null;
Ursprüngliche Antwort (gearbeitet im Jahr 2009)
So schalten Sie es ein:
window.onbeforeunload = "Are you sure you want to leave?";
So schalten Sie es aus:
window.onbeforeunload = null;
Denken Sie daran, dass dies kein normales Ereignis ist - Sie können sich nicht wie gewohnt daran binden.
Um nach Werten zu suchen? Das hängt von Ihrem Validierungsrahmen ab.
In jQuery könnte dies so etwas sein (sehr einfaches Beispiel):
$('input').change(function() {
if( $(this).val() != "" )
window.onbeforeunload = "Are you sure you want to leave?";
});