[请问您确定要离开本页吗?]的实现方法

onunload、onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过window.onunload来指定或者在<body>里指定。区别在于onbeforeunload在onunload之前执行,它还可以阻止onunload的执行。
  onbeforeunload也是在页面刷新或关闭时调用,onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。onunload是无法阻止页面的更新和关闭的。而onbeforeunload可以做到。
    1、onbeforeunload事件:
  说明:目前三大主流浏览器中firefox和IE都支持onbeforeunload事件,opera尚未支持。
  用法:
   ·object.onbeforeunload = handler
   ·<element onbeforeunload = “handler” … ></element>
  描述:
   事件触发的时候弹出一个有确定和取消的对话框,确定则离开页面,取消则继续待在本页。handler可以设一个返回值作为该对话框的显示文本。

  触发于:
   ·关闭浏览器窗口
   ·通过地址栏或收藏夹前往其他页面的时候
   ·点击返回,前进,刷新,主页其中一个的时候
   ·点击一个前往其他页面的url连接的时候
   ·调用以下任意一个事件的时候:click,document write,document open,document close,window close ,window navigate ,window NavigateAndFind,location replace,location reload,form submit.
   ·当用window open打开一个页面,并把本页的window的名字传给要打开的页面的时候。
   ·重新赋予location.href的值的时候。
   ·通过input type=”submit”按钮提交一个具有指定action的表单的时候。
  可以用在以下元素:
   ·BODY, FRAMESET, window
  平台支持:
   IE4+/Win, Mozilla 1.7a+, Netscape 7.2+, Firefox0.9+
  示例:
      a)
      <html xmlns=" http://www.w3.org/1999/xhtml">
       <head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
         <title>onbeforeunload测试</title>
       <script>
           function checkLeave(){
          event.returnValue="确定离开当前页面吗?";
           }
         </script>
     </head>
     <body onbeforeunload="checkLeave()"></body>
   </html>
      b)
      <html xmlns=" http://www.w3.org/1999/xhtml">
       <head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
         <title>onbeforeunload测试</title>
       <script>
           function checkLeave(){
          event.returnValue="确定离开当前页面吗?";
           }
            window.onbeforeunload = checkLeave;
         </script>
     </head>
     <body></body>
   </html>

    2、onunload事件
  用法:
   ·object.onbeforeunload = handler
   ·<element onbeforeunload = "handler"></element>
  描述:
   当用户关闭一个页面时触发 onunload 事件。

  触发于:
   ·关闭浏览器窗口
   ·通过地址栏或收藏夹前往其他页面的时候
   ·点击返回,前进,刷新,主页其中一个的时候
   ·点击 一个前往其他页面的url连接的时候
   ·调用以下任意一个事件的时候:click,document write,document open,document close,window close ,window navigate ,window NavigateAndFind,location replace,location reload,form submit.
   ·当用window open打开一个页面,并把本页的window的名字传给要打开的页面的时候。
   ·重新赋予location.href的值的时候。
   ·通过input type=”submit”按钮提交一个具有指定action的表单的时候。
  示例:
      a)
      <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
       <title>onunload测试</title>
       <script>
         function checkLeave(){
           alert("欢迎下次再来!");
         }
       </script>
     </head>
     <body onunload="checkLeave()"></body>
   </html>
      b)
      <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
       <title>onunload测试</title>
       <script>
         function checkLeave(){
           alert("欢迎下次再来!");
         }
            window.onunload=checkLeave;
       </script>
     </head>
     <body></body>
   </html>

    ---------------------------------------我是华丽的分割线------------------------------------------
    onbeforeunload与a标签在IE中的冲突bug

    onbeforeunload是window的一个事件,目前Firefox,IE都支持,主要用来提示用户是否真的要离开该页面,通常在一些比较重要的数据提交之前,防止用户误操作导致数据丢失。典型的应用如gmail中,在写邮件的时候,如果刷新页面或者关闭页面,会出现提示。
    但是在IE下点击一些a标签时,也会触发onbeforeunload事件。并且href中写javascript:void(0)也不行,而在Firefox中不会出现类似的情况。于是查资料对onbeforeunload事件重新认识了一下:
    a标签触发事件的顺序
    onclick、onbeforeunload跟href三者之间的先后运行关系是这样的:onclick > onbeforeunload > href,知道了这个道理,我们就可以通过一些方法阻止onbeforeunload。另外在IE浏览器中,假如href为#,那么也不会触发 onbeforeunload事件。
    怎么阻止onbeforeunload
    在Ajax的同时,给a标签加上onclick事件,这样onclick在onbeforeunload之前运行,然后来个return false,就可以啦~
    绕过onbeforeunload直接href
    结合onclick事件,我们可以绕过onbeforeunload直接href,下面的代码就可以绕过onbeforeunload而执行href:
    var a=1;
    window.onbeforeunload=function()
    {
        if(a)alert("onbeforeunload事件爆发了!");
    }
    只要我们在onclick事件加上一个a=0;就可以了~
    实例
    此处使用了window.onbeforeunload对onclick、onbeforeunload和href进行的测试。

你可能感兴趣的:(方法)