Как я могу отобразить «Вы уверены, что хотите покинуть страницу?» когда пользователь фактически пытается закрыть страницу (нажмите кнопку X в окне или вкладке браузера), а не когда он пытается уйти со страницы (щелкнуть по другой ссылке).
Мой клиент хочет, чтобы при закрытии страницы пользователем появлялось сообщение: «Вы уверены, что хотите покинуть страницу? У вас все еще есть товары в корзине».
К сожалению $(window).bind('beforeunload')
, не срабатывает только тогда, когда пользователь закрывает страницу.
jQuery:
function checkCart() {
$.ajax({
url : 'index.php?route=module/cart/check',
type : 'POST',
dataType : 'json',
success : function (result) {
if (result) {
$(window).bind('beforeunload', function(){
return 'leave?';
});
}
}
})
}
javascript
jquery
Крис
источник
источник
Ответы:
Вы можете сделать это с помощью JQuery .
К примеру ,
<a href="your URL" id="navigate"> click here </a>
Ваша
JQuery
будет,$(document).ready(function(){ $('a').on('mousedown', stopNavigate); $('a').on('mouseleave', function () { $(window).on('beforeunload', function(){ return 'Are you sure you want to leave?'; }); }); }); function stopNavigate(){ $(window).off('beforeunload'); }
И чтобы получить предупреждение о выходе из сообщения ,
$(window).on('beforeunload', function(){ return 'Are you sure you want to leave?'; }); $(window).on('unload', function(){ logout(); });
Это решение работает во всех браузерах, и я его тестировал.
источник
onsubmit
тоже стоит присмотреться ), но он не будет работать для кнопок браузера «Назад» и «Вперед». Я полагаю, что для этого нет идеального решения.$(window).on('unload', function()
не выполняется в Safari.beforeunload
если браузер закрывается из-за выключения ОС?Попробуйте использовать javascript в свой Ajax
window.onbeforeunload = function(){ return 'Are you sure you want to leave?'; };
Ссылка на ссылку
Пример 2:
document.getElementsByClassName('eStore_buy_now_button')[0].onclick = function(){ window.btn_clicked = true; }; window.onbeforeunload = function(){ if(!window.btn_clicked){ return 'You must click "Buy Now" to make payment and finish your order. If you leave now your order will be canceled.'; } };
Здесь он будет предупреждать пользователя каждый раз, когда он покидает страницу, пока он не нажмет кнопку.
ДЕМО: http://jsfiddle.net/DerekL/GSWbB/show/
источник
Кредит должен быть здесь: как определить, была ли нажата ссылка при срабатывании window.onbeforeunload?
По сути, решение добавляет прослушиватель, чтобы определить, вызвало ли событие выгрузки ссылка или окно.
var link_was_clicked = false; document.addEventListener("click", function(e) { if (e.target.nodeName.toLowerCase() === 'a') { link_was_clicked = true; } }, true); window.onbeforeunload = function(e) { if(link_was_clicked) { return; } return confirm('Are you sure?'); }
источник
Как указано здесь https://stackoverflow.com/a/1632004/330867 , вы можете реализовать это, «фильтруя» то, что является источником выхода с этой страницы.
Как упоминалось в комментариях, вот новая версия кода в другом вопросе, которая также включает запрос ajax, который вы делаете в своем вопросе:
var canExit = true; // For every function that will call an ajax query, you need to set the var "canExit" to false, then set it to false once the ajax is finished. function checkCart() { canExit = false; $.ajax({ url : 'index.php?route=module/cart/check', type : 'POST', dataType : 'json', success : function (result) { if (result) { canExit = true; } } }) } $(document).on('click', 'a', function() {canExit = true;}); // can exit if it's a link $(window).on('beforeunload', function() { if (canExit) return null; // null will allow exit without a question // Else, just return the message you want to display return "Do you really want to close?"; });
Важно : у вас не должно быть определенной глобальной переменной (здесь
canExit
), это здесь для более простой версии.Обратите внимание, что вы не можете полностью переопределить подтверждающее сообщение (по крайней мере, в хроме). Сообщение, которое вы вернете, будет добавлено только к сообщению, предоставленному Chrome. Вот причина: как я могу переопределить диалоговое окно OnBeforeUnload и заменить его своим собственным?
источник
1.7
.live
устарел. Вместо него$(document).on('click', 'a', ...)
следует использовать..on
обычно предпочтительнее старых функций, так.bind
и было бы$('form').on('submit', ...)
.Попробуйте это, загрузив данные через
ajax
и отобразив через оператор return.<script type="text/javascript"> function closeWindow(){ var Data = $.ajax({ type : "POST", url : "file.txt", //loading a simple text file for sample. cache : false, global : false, async : false, success : function(data) { return data; } }).responseText; return "Are you sure you want to leave the page? You still have "+Data+" items in your shopping cart"; } window.onbeforeunload = closeWindow; </script>
источник
Вы можете попробовать '
onbeforeunload
' мероприятие.Также взгляните на это -
Диалоговое окно открывается в течение 1 секунды и исчезает?
источник