jquery beforeclosures(不离开)页面时,
我怎样才能显示“你确定要离开页面吗?” 当用户尝试closures页面(单击浏览器窗口或选项卡上的Xbutton)而不是尝试从页面导航(单击另一个链接)时。
我的客户希望在用户尝试closures页面时显示一条消息“您确定要离开页面吗?您的购物车中还有商品。
不幸的是, $(window).bind('beforeunload')
只有在用户closures页面时才会触发。
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?'; }); } } }) }
你可以通过使用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(); });
这个解决scheme适用于所有浏览器,我已经testing过了。
信用应该在这里: 如何检测window.onbeforeunload触发时,如果一个链接被点击?
基本上,解决scheme添加一个侦听器来检测链接或窗口是否导致卸载事件触发。
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?'); }
尝试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.'; } };
这里每当他离开页面时都会提醒用户,直到他点击button。
DEMO: http : //jsfiddle.net/DerekL/GSWbB/show/
如这里所示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?"; });
重要说明 :您不应该定义一个全局variables(这里是canExit
),这里是简单的版本。
请注意,您无法完全覆盖确认消息(至less在Chrome中)。 您返回的信息只会被Chrome浏览器提供。 原因如下: 我如何覆盖OnBeforeUnload对话框并将其replace为我自己的?
试试这个,通过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>
jQuery解决scheme:
附上'beforeunload'
事件后,当你closures页面,点击后退button或重新加载页面,确认框会提示你是否真的要去,selectok退出页面:取消停止页面退出并保持在同一页面上。
另外,您可以在确认框中添加您自己的信息:
$(window).bind('beforeunload', function(){ return '>>>>>Before You Go<<<<<<<< \n Your custom message go here'; });
PS:自从jQuery 1.4以来,支持'beforeunload'
事件。
使用Javascript:
对于IE和FF <4,将window.event.returnValue
设置为您希望显示的string,然后将其返回给Safari(使用null
代替以允许正常行为):
window.onbeforeunload = function (e) { var e = e || window.event; // For IE and Firefox prior to version 4 if (e) { e.returnValue = 'Any string'; } // For Safari return 'Any string'; };
你可以尝试' onbeforeunload
'事件。
也看看这个 –
对话框运行1秒钟并消失?