Событие beforeunload
возникает, когда пользователь покидает вашу страницу по любой причине.
Например, он будет запущен, если пользователь отправит форму, щелкнет ссылку, закроет окно (или вкладку) или перейдет на новую страницу с помощью адресной строки, поля поиска или закладки.
Вы можете исключить отправку формы и гиперссылки (кроме других фреймов) со следующим кодом:
var inFormOrLink;
$('a').on('click', function() { inFormOrLink = true; });
$('form').on('submit', function() { inFormOrLink = true; });
$(window).on("beforeunload", function() {
return inFormOrLink ? "Do you really want to close?" : null;
})
Для версий jQuery старше 1.7 попробуйте это:
var inFormOrLink;
$('a').live('click', function() { inFormOrLink = true; });
$('form').bind('submit', function() { inFormOrLink = true; });
$(window).bind("beforeunload", function() {
return inFormOrLink ? "Do you really want to close?" : null;
})
Метод live
не работает с событием submit
, поэтому, если вы добавляете новую форму, вам необходимо также привязать к ней обработчик.
Обратите внимание, что если другой обработчик событий отменяет отправку или навигацию, вы потеряете запрос на подтверждение, если позднее окно действительно закроется. Это можно исправить, записав время в событиях submit
и click
и проверив, произойдет ли beforeunload
больше, чем через пару секунд.