Также, если вы используете сторонние библиотеки, убедитесь, что у вас есть правильные 32/64 битные файлы
Обратите внимание, что в вашем коде вы используете onbeforeclose
, но имя события beforeunload
, поэтому свойство onbeforeunload
, а не onbeforeclose
.
Я просто хотите работать с этим кодом только для обновления и закрытия браузера. Есть ли способ поймать обновление или просмотр браузера, чтобы он мог его использовать.
blockquote>Нет. Вместо этого вам нужно будет захватить каждую ссылку и отправить форму и установить флаг, указывающий вашему обработчику
onbeforeunload
, чтобы он не возвращал строку или не удалял ваш обработчикonbeforeunload
(возможно, флаг является более чистым).Например:
var warnBeforeClose = true; function unloadPage(){ if (warnBeforeClose) { return "Your changes will not be saved."; } } window.onbeforeunload = unloadPage; // ...when the elements exist: $("a").click(dontWarn); $("form").submit(dontWarn); function dontWarn() { // Don't warn warnBeforeClose = false; // ...but if we're still on the page a second later, set the flag again setTimeout(function() { warnBeforeClose = true; }, 1000); }
Или без
setTimeout
(но все еще с таймаутом):var warningSuppressionTime = 0; function unloadPage(){ if (+new Date() - warningSuppressionTime > 1000) { // More than a second return "Your changes will not be saved."; } } window.onbeforeunload = unloadPage; // ...when the elements exist: $("a").click(dontWarn); $("form").submit(dontWarn); function dontWarn() { // Don't warn for the next second warningSuppressionTime = +new Date(); }
Обновление в 2017 году: Также обратите внимание, что с по крайней мере пару лет назад, браузеры не показывают сообщение, которое вы возвращаете; они просто используют тот факт, что вы вернули что-то другое, кроме
null
, в качестве флага, чтобы вместо этого отображать собственное встроенное сообщение.
Одним из простых решений вашей проблемы является наличие флага, а затем вызов вашей функции только в том случае, если флаг действителен. В этом случае вы можете привязать теги привязки, клавишу F5 и кнопку отправки формы, чтобы перейти к событиям, которые устанавливают флаг как false. Таким образом, ваша панель предупреждений будет видна только в том случае, если вышеуказанные случаи не выполняются:)
Вот сценарий:
var validNavigation = false;
function endSession() {
// Browser or broswer tab is closed
alert("bye");
}
function wireUpEvents() {
window.onbeforeunload = function() {
if (!validNavigation) {
endSession();
}
}
// Attach the event keypress to exclude the F5 refresh
$(document).bind('keypress', function(e) {
if (e.keyCode == 116){
validNavigation = true;
}
});
// Attach the event click for all links in the page
$("a").bind("click", function() {
validNavigation = true;
});
// Attach the event submit for all forms in the page
$("form").bind("submit", function() {
validNavigation = true;
});
// Attach the event click for all inputs in the page
$("input[type=submit]").bind("click", function() {
validNavigation = true;
});
}
// Wire up the events as soon as the DOM tree is ready
$(document).ready(function() {
wireUpEvents();
});
Проверить эту ссылку
Она дает вам информацию о том, как обрабатывать событие onbeforeunload.
Идея состоит в том, чтобы на странице был глобальный флаг. Когда в поля поменяются какие-либо изменения, этот флаг имеет значение true. При нажатии кнопки «Сохранить» этот флаг должен быть установлен на «false».
В событии onbeforeunload проверьте, является ли флаг истинным, а затем отобразите соответствующее сообщение.
var needToConfirm = true;
window.onbeforeunload = confirmExit;
function confirmExit()
{
if (needToConfirm)
{
// check on the elements whether any change has been done on the fields.
// If any change has been done, then set message here.
}
}
function saveClicked()
{
needToConfirm = false;
}
(запустите или обновите скрипт, чтобы увидеть сообщение о событии onbeforeunload()
и нажмите ссылку «kk», он не будет показывать сообщение о событии onbeforeunload()
Попробуйте это на своей веб-странице)
У меня есть решение для вас, вам нужно добавить событие onclick для каждого тега и всех.
Просто добавьте это в любое место на своих страницах .
<input type="hidden" value="true" id="chk"/>
и добавьте этот код в свой тег заголовка документа
<script>
window.onbeforeunload = confirmExit;
function confirmExit()
{
if(document.getElementById("chk").value=="true")
{
return "Your changes will not be saved.";
}
}
document.onclick = myClickHandler;
function myClickHandler() {
document.getElementById("chk").value="false";
}
<script>
Надеюсь, что это поможет
Спасибо