Здесь, в stackoverflow, если вы начали вносить изменения, то вы пытаетесь отойти от страницы, появляется кнопка подтверждения javascript и спрашивает: «Вы уверены, что хотите отойти от этой страницы?» бле бла бло ...
Кто-нибудь реализовывал это раньше, как я могу отследить, что изменения были зафиксированы? Я полагаю, что мог бы сделать это сам, я пытаюсь изучить хорошие практики у вас, экспертов.
Я попробовал следующее, но все еще не работает:
<html>
<body>
<p>Close the page to trigger the onunload event.</p>
<script type="text/javascript">
var changes = false;
window.onbeforeunload = function() {
if (changes)
{
var message = "Are you sure you want to navigate away from this page?\n\nYou have started writing or editing a post.\n\nPress OK to continue or Cancel to stay on the current page.";
if (confirm(message)) return true;
else return false;
}
}
</script>
<input type='text' onchange='changes=true;'> </input>
</body>
</html>
Кто-нибудь может опубликовать пример?
javascript
html
message
onbeforeunload
confirm
Шимми Вайцхандлер
источник
источник
Ответы:
Обновление (2017)
Современные браузеры теперь рассматривают отображение собственного сообщения как угрозу безопасности, и поэтому оно было удалено из всех. Браузеры теперь отображают только общие сообщения. Поскольку нам больше не нужно беспокоиться об установке сообщения, это так просто:
Читайте ниже для поддержки устаревшего браузера.
Обновление (2013)
Оригинальный ответ подходит для IE6-8 и FX1-3.5 (к чему мы стремились в 2009 году, когда он был написан), но сейчас он устарел и не будет работать в большинстве современных браузеров - я оставил это ниже для справки.
window.onbeforeunload
Не рассматривается последовательно всеми браузерами. Это должна быть ссылка на функцию, а не строка (как указывалось в исходном ответе), но она будет работать в старых браузерах, потому что проверка для большинства из них заключается в том, назначено ли что-либоonbeforeunload
(включая функцию, которая возвращаетnull
).Вы устанавливаете
window.onbeforeunload
ссылку на функцию, но в старых браузерах вы должны установитьreturnValue
событие вместо того, чтобы просто возвращать строку:Вы не можете сделать это, чтобы
confirmOnPageExit
сделать проверку и вернуть ноль, если вы хотите, чтобы пользователь продолжил без сообщения. Вам все еще нужно удалить событие, чтобы надежно включить и выключить его:Оригинальный ответ (работал в 2009 году)
Включить это:
Чтобы выключить это:
Имейте в виду, что это ненормальное событие - вы не можете связать его стандартным способом.
Чтобы проверить значения? Это зависит от вашей структуры проверки.
В jQuery это может быть что-то вроде (очень простой пример):
источник
$("#submit_button").click(function() { window.onbeforeunload = null; });
. Первоначально я использовал событие onclick для кнопки, но, несмотря на то, что он не был так хорош, он также не работал с IE8.window.onbeforeunload
событие.onbeforeunload
Microsoft-изма ближе всего мы должны стандартное решение, но имейте в виду , что поддержка браузера неравномерно; например, для Opera он работает только в версии 12 и более поздних (все еще в бета-версии на момент написания статьи).Кроме того, для максимальной совместимости вам нужно сделать больше, чем просто вернуть строку, как описано в Mozilla Developer Network .
Пример. Определите следующие две функции для включения / отключения подсказки навигации (см. Пример MDN):
Затем определите форму следующим образом:
Таким образом, пользователь будет предупрежден о выходе из системы только в том случае, если он изменил текстовую область, и не будет запрашиваться при фактической отправке формы.
источник
Чтобы сделать это в Chrome и Safari, вам нужно сделать это следующим образом
Ссылка: https://developer.mozilla.org/en/DOM/window.onbeforeunload
источник
С JQuery это легко сделать. Так как вы можете привязать к наборам.
Этого недостаточно, чтобы выполнить onbeforeunload, вы хотите запускать навигацию, только если кто-то начал редактировать материал.
источник
jquerys 'beforeunload' отлично работал для меня
источник
для новых людей, которые ищут простое решение, просто попробуйте Areyousure.js
источник
Это простой способ представить сообщение, если в форму введены какие-либо данные, и не показывать сообщение, если форма отправлена:
источник
Чтобы расширить на уже удивительный ответ Кита :
Пользовательские предупреждающие сообщения
Чтобы разрешить настраиваемые предупреждающие сообщения, вы можете заключить их в функцию, подобную этой:
Затем просто вызовите эту функцию с вашим собственным сообщением:
Снова включить навигацию
Чтобы повторно включить навигацию, все , что вам нужно сделать , это установить
window.onbeforeunload
вnull
. Вот она, заключенная в аккуратную маленькую функцию, которую можно вызывать где угодно:Использование jQuery для привязки этого к элементам формы
При использовании jQuery это может быть легко привязано ко всем элементам формы следующим образом:
Затем, чтобы разрешить отправку формы:
Динамически модифицированные формы:
preventNavigation()
иenableNavigation()
может быть привязан к любым другим функциям при необходимости, например, к динамическому изменению формы или к нажатию кнопки, которая отправляет запрос AJAX. Я сделал это, добавив скрытый элемент ввода в форму:Затем в любое время, когда я хочу запретить пользователю переходить, я запускаю изменения на этом входе, чтобы убедиться, что он
preventNavigation()
выполняется:источник
Вот попробуй это работает 100%
источник
В стандартных состояниях , что побуждение можно управлять путем отмены beforeunload события или установив возвращаемое значение значения ненулевого . В нем также говорится, что авторы должны использовать Event.preventDefault () вместо returnValue, и сообщение, отображаемое пользователю , не настраивается .
По состоянию на 69.0.3497.92 Chrome не соответствовал стандарту. Тем не менее, имеется отчет об ошибке , и проверка еще не завершена. Chrome требует, чтобы returnValue устанавливалось путем ссылки на объект события, а не на значение, возвращаемое обработчиком.
Автор несет ответственность за отслеживание внесения изменений; это можно сделать с помощью переменной или путем обеспечения того, что событие обрабатывается только при необходимости.
источник
Когда пользователь начинает вносить изменения в форму, устанавливается логический флаг. Если пользователь затем пытается отойти от страницы, вы проверяете этот флаг в событии window.onunload . Если флаг установлен, вы показываете сообщение, возвращая его в виде строки. При возврате сообщения в виде строки появится диалоговое окно подтверждения, содержащее ваше сообщение.
Если вы используете ajax для фиксации изменений, вы можете установить флаг
false
после того, как изменения были зафиксированы (т.е. в событии успеха ajax).источник
Вы можете добавить
onchange
событие в текстовое поле (или любые другие поля), которое устанавливает переменную в JS. Когда пользователь пытается закрыть страницу (window.onunload), вы проверяете значение этой переменной и соответственно выводите предупреждение.источник
alert
иconfirm
заблокированы во времяwindow.onbeforeunload
иwindow.onunload
(по крайней мере, в версии Chrome на моем ПК, но, вероятно, также в каждом браузере, который когда-либо поддерживал эти обработчики).Основываясь на всех ответах в этой теме, я написал следующий код, и он работал для меня.
Если у вас есть только некоторые теги input / textarea, требующие проверки события onunload, вы можете назначить атрибуты данных HTML5 как
data-onunload="true"
например,
и Javascript (jQuery) может выглядеть так:
источник
вот мой HTML
И вот как я сделал нечто подобное в javaScript
источник
Это легко сделать, установив для ChangeFlag значение true для события onChange TextArea . Используйте JavaScript, чтобы показать диалоговое окно подтверждения на основе значения ChangeFlag . Откажитесь от формы и перейдите на запрашиваемую страницу, если подтвердите, вернет true, иначе ничего не делать .
источник
То, что вы хотите использовать, это событие onunload в JavaScript.
Вот пример: http://www.w3schools.com/jsref/event_onunload.asp
источник
Для тега body есть параметр «onunload», из которого можно вызывать функции javascript. Если он возвращает false, он предотвращает навигацию.
источник
<body onunload="return false;">
.