当浏览器窗口意外closures时发出警报

我有一个聊天应用程序,我希望每当用户意外或手动closures浏览器,他应该得到一个警报,以便可以进行各种清理操作。 我有更多的事情我以前在事件上使用,但我希望这是用于特定的网页,因为所有其他网页也加载之前调用。 请帮忙

我们应该阻止或提示用户在执行这些操作时会丢失他的数据。

  1. 点击后面的浏览器button。
  2. 点击刷新浏览器button。
  3. 点击浏览器的closuresbutton。
  4. 点击转发浏览器button。
  5. 键盘笔画 – Alt + F4 (closures)
  6. 键盘笔画 – F5 (刷新)
  7. 键盘笔画 – CTRL + F5 (刷新)
  8. 键盘笔画 – Shift + F5 (刷新)
  9. 更改url
  10. 或者任何导致回发的东西,除了你的特定的提交button。

为了解释我已经使用了两个文本框,一个Asp.net提交button的ID为TestButton。 我采取的其他回发控件是一个其他的asp.netbutton,一个autopostback属性为true的checkbox,一个具有autopostback属性true的dropdownlist。 现在我已经使用了所有这些回发控件,以便向用户展示当用户在这些控件上执行操作时,我们还需要向用户显示Promt给用户有关数据丢失的信息。 在提交button,我们不会显示提示,因为我们必须提交数据与该控制action.Here是示例代码。我已经设置了window.onbeforeunload方法的控件更改。

<html > <head id="Head1"> <title></title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <script type="text/javascript"> $(function() { // Prevent accidental navigation away $(':input').bind( 'change', function() { setConfirmUnload(true); }); $('.noprompt-required').click( function() { setConfirmUnload(false); }); function setConfirmUnload(on) { window.onbeforeunload = on ? unloadMessage : null; } function unloadMessage() { return ('You have entered new data on this page. ' + 'If you navigate away from this page without ' + 'first saving your data, the changes will be lost.'); } window.onerror = UnspecifiedErrorHandler; function UnspecifiedErrorHandler() { return true; } }); </script> </head> <body> <form id="form1" name="myForm" runat="server"> <div> First Name :<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> <br /> Last Name :<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br /> <br /> IsMarried :<asp:CheckBox ID="CheckBox1" runat="server" /><br /> <br /> <asp:Button runat="server" ID="TestButton" Text="Submit" CssClass="noprompt-required" /><br /> <br /> <br /> <br /> <br /> <asp:Button runat="server" ID="AnotherPostbackButton" Text="AnotherPostbackButton" /><br /> <br /> <asp:CheckBox runat="server" ID="CheckboxWhichCausePostback" Text="CheckboxWhichCausePostback" AutoPostBack="true" /><br /> <br /> DropdownWhichCausePostback<asp:DropDownList runat="server" ID="DropdownWhichCausePostback" AutoPostBack="true"> <asp:ListItem Text="Text1"></asp:ListItem> <asp:ListItem Text="Text2"></asp:ListItem> </asp:DropDownList> <br /> <br /> </div> </form> </body> 

以上我用过:

 $('.noprompt-required').click(function() { setConfirmUnload(false); }); 

我在这一行所做的是我调用setConfirmUnload方法,并传递false作为参数将设置window.onbeforeunload为null。 所以这意味着什么是在任何你想要的用户不应该被提示的控制,给这个控制类.noprompt-required和其他保持原样。

这不是一个真正的JQuery的东西,我使用这个function:

 function setConfirmUnload(on) { window.onbeforeunload = (on) ? unloadMessage : null; } function unloadMessage() { return "Are you sure you want to leave this page"; } 

那么,随时可以打电话

setConfirmUnload(true)启用确认,如果您希望允许他们在没有警告的情况下closures屏幕(如果您有closuresbutton),则为false。

您可以尝试卸载事件:

 $(window).unload( function () { alert("Bye now!"); } ); 

http://docs.jquery.com/Events/unload

我猜这个清理只在客户端上。 了解这些“清理”的性质将是有趣的。

你可以用ajax来试试这个

 $(window).unload( function () { alert("AJAX function to do required job"); } );