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秒钟并消失?