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
происходит больше , чем на пару секунд позже.
Ctrl + r
,F5
,Ctrl + Shift + r
и изменение URL браузера?.on()
.Может быть, просто отсоедините
beforeunload
обработчик событий в обработчике событий формыsubmit
:источник
onsubmit=...
в каждую форму. (У меня есть много форм на странице, в определенном веб-приложении)Для кросс-браузерного решения (протестированного в Chrome 21, IE9, FF15) рассмотрите возможность использования следующего кода, который является слегка подправленной версией кода Slaks:
Обратите внимание, что начиная с Firefox 4 появляется сообщение «Вы действительно хотите закрыть?» не отображается. FF просто отображает общее сообщение. См. Примечание в https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeunload
источник
live
иbind
операторыon
, и операторы , что прекрасно работает с последним уровнем jQuery. Спасибо!источник
Для решения, которое хорошо работает со сторонними элементами управления, такими как Telerik (например, RadComboBox) и DevExpress, которые используют теги Anchor по разным причинам, рассмотрите возможность использования следующего кода, который является слегка подправленной версией кода desm с лучшим селектором для себя целевые теги привязки:
источник
Мой ответ нацелен на обеспечение простых ориентиров.
КАК
Смотрите ответ @SLaks .
Сколько времени занимает браузер, чтобы наконец закрыть вашу страницу?
Всякий раз, когда пользователь закрывает страницу ( xкнопка или CTRL+ W), браузер выполняет данный
beforeunload
код, но не бесконечно. Единственным исключением является поле подтверждения (return 'Do you really want to close?
), которое будет ждать ответа пользователя.Хром : 2 секунды.
Firefox : ∞ (или двойной щелчок, или принудительное закрытие)
Edge : ∞ (или двойной щелчок)
Explorer 11 : 0 секунд.
Сафари : ТОДО
Что мы использовали, чтобы проверить это:
Он отправляет столько запросов, сколько может, прежде чем браузер закрывает свою страницу (синхронно).
Хромированный выход:
источник
Я использовал ответ Slaks, но это не сработало как есть, поскольку onbeforeunload returnValue анализируется как строка и затем отображается в окне подтверждения браузера. Таким образом, значение true отображалось, как «true».
Просто с помощью возврата сработало. Вот мой код
источник
Возможно, вы могли бы обработать OnSubmit и установить флаг, который вы позже отметите в своем обработчике OnBeforeUnload.
источник
источник
К сожалению, будь то перезагрузка, перенаправление новой страницы или закрытие браузера, событие будет запущено. Альтернативой является перехват идентификатора, инициирующего событие, и если это форма, не запускайте никакую функцию, а если это не идентификатор формы, делайте то, что вы хотите сделать, когда страница закрывается. Я не уверен, что это также возможно напрямую и утомительно.
Вы можете сделать небольшие вещи, прежде чем клиент закроет вкладку. JavaScript обнаруживает, что браузер закрывает вкладку / закрывает браузер, но если ваш список действий большой и вкладка закрывается до его завершения, вы беспомощны. Вы можете попробовать это, но мой опыт не зависит от этого.
https://developer.mozilla.org/en-US/docs/Web/Reference/Events/beforeunload?redirectlocale=en-US&redirectslug=DOM/Mozilla_event_reference/beforeunload
источник
Если отправка вашей формы переносит их на другую страницу (как я полагаю, это вызывает срабатывание
beforeunload
), вы можете попытаться изменить отправку формы на вызов ajax. Таким образом, они не покинут вашу страницу при отправке формы, и вы можете использовать свойbeforeunload
код привязки по своему усмотрению.источник
Моя проблема: событие «onbeforeunload» будет запускаться только при наличии нечетного числа отправок (кликов). У меня была комбинация решений из аналогичных потоков в SO, чтобы мое решение работало. хорошо мой код будет говорить.
источник
Начиная с jQuery 1.7, метод .live () устарел. Используйте .on (), чтобы прикрепить обработчики событий. Пользователи более старых версий jQuery должны использовать .delegate () вместо .live ()
по полной или по ссылке
источник
Попробуйте это также
источник
Просто проверьте ...
источник
источник
Следующее сработало для меня;
источник
event.clientY
Отрицательна , если нажать на кнопку Закрыть Браузер кнопку закрытия или вкладки. Однако это значение является положительным, когда вы перезагружаете страницу с помощью сочетаний клавиш (F5, Ctrl-R) или закрываете браузер с помощью сочетаний клавиш (например, Alt-F4). Таким образом, нельзя полагаться на положение события, чтобы отличать событие закрытия браузера от события перезагрузки страницы.