Aktualizacja (2017)
Współczesne przeglądarki rozważają teraz wyświetlanie niestandardowego komunikatu jako zagrożenia bezpieczeństwa, dlatego został on usunięty ze wszystkich. Przeglądarki wyświetlają teraz tylko ogólne wiadomości. Ponieważ nie musimy się już martwić ustawieniem wiadomości, jest to tak proste, jak:
// Enable navigation prompt
window.onbeforeunload = function() {
return true;
};
// Remove navigation prompt
window.onbeforeunload = null;
Przeczytaj poniżej, aby zapoznać się ze starszą obsługą przeglądarek.
Aktualizacja (2013)
Oryginalna odpowiedź jest odpowiednia dla IE6-8 i FX1-3.5 (na co celowaliśmy w 2009 roku, kiedy została napisana), ale jest raczej nieaktualna i nie będzie działać w większości obecnych przeglądarek - wyszedłem poniżej w celach informacyjnych.
Nie window.onbeforeunload
jest traktowane konsekwentnie przez wszystkie przeglądarki. Powinno to być odwołanie do funkcji, a nie ciąg znaków (jak podano w pierwotnej odpowiedzi), ale zadziała to w starszych przeglądarkach, ponieważ wydaje się, że większość z nich sprawdza, czy coś jest przypisane onbeforeunload
(w tym funkcja, która zwraca null
).
Ustawiono window.onbeforeunload
odwołanie do funkcji, ale w starszych przeglądarkach należy ustawić returnValue
zdarzenie zamiast po prostu zwracać ciąg:
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;
};
Nie możesz tego confirmOnPageExit
zrobić i sprawdzić zero, jeśli chcesz, aby użytkownik kontynuował bez wiadomości. Nadal musisz usunąć zdarzenie, aby niezawodnie włączyć i wyłączyć:
// Turn it on - assign the function that returns the string
window.onbeforeunload = confirmOnPageExit;
// Turn it off - remove the function entirely
window.onbeforeunload = null;
Oryginalna odpowiedź (opracowana w 2009 r.)
Żeby to włączyć:
window.onbeforeunload = "Are you sure you want to leave?";
Aby to wyłączyć:
window.onbeforeunload = null;
Pamiętaj, że to nie jest normalne wydarzenie - nie możesz się z nim związać w standardowy sposób.
Aby sprawdzić wartości? To zależy od twoich ram weryfikacji.
W jQuery może to być coś (bardzo prosty przykład):
$('input').change(function() {
if( $(this).val() != "" )
window.onbeforeunload = "Are you sure you want to leave?";
});