Обновление (2017)
Современные браузеры теперь считают отображение пользовательского сообщения угрозой безопасности, и поэтому оно было удалено из всех них. Браузеры теперь отображают только общие сообщения. Поскольку нам больше не нужно беспокоиться о настройке сообщения, это так просто:
// Enable navigation prompt
window.onbeforeunload = function() {
return true;
};
// Remove navigation prompt
window.onbeforeunload = null;
Подробнее о поддержке устаревших браузеров см. Ниже.
Обновление (2013)
Оригинальный ответ подходит для IE6-8 и FX1-3.5 (к чему мы стремились в 2009 году, когда он был написан), но сейчас он устарел и не будет работать в большинстве современных браузеров - я оставил его ниже для справки.
window.onbeforeunload
не обрабатывается согласованно всеми браузерами. Это должна быть ссылка на функцию, а не строка (как указывалось в исходном ответе), но она будет работать в старых браузерах, потому что проверка для большинства из них заключается в том, присваивается ли что-нибудь onbeforeunload
(включая функцию, которая возвращает null
).
Вы устанавливаете window.onbeforeunload
для ссылки на функцию, но в старых браузерах вы должны установить returnValue
события вместо того, чтобы просто возвращать строку:
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;
};
Вы не можете, чтобы confirmOnPageExit
выполнял проверку и возвращал ноль, если вы хотите, чтобы пользователь продолжил работу без сообщения. Вам все еще нужно удалить событие, чтобы надежно включить и выключить его:
// Turn it on - assign the function that returns the string
window.onbeforeunload = confirmOnPageExit;
// Turn it off - remove the function entirely
window.onbeforeunload = null;
Оригинальный ответ (работал в 2009 г.)
Чтобы включить:
window.onbeforeunload = "Are you sure you want to leave?";
Чтобы отключить его:
window.onbeforeunload = null;
Помните, что это ненормальное событие - вы не можете связать его стандартным способом.
Чтобы проверить значения? Это зависит от вашей структуры валидации.
В jQuery это может быть что-то вроде (очень простой пример):
$('input').change(function() {
if( $(this).val() != "" )
window.onbeforeunload = "Are you sure you want to leave?";
});