Обновление (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?";
});