博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
onbeforeunload与onunload事件
阅读量:4984 次
发布时间:2019-06-12

本文共 2675 字,大约阅读时间需要 8 分钟。

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+ 
  
示例:
< html xmlns = " " >
< head >
< meta http - equiv = " Content-Type "  content = " text/html; charset=gb2312 "   / >
< title > onbeforeunload测试 < / title>
< script >
function  checkLeave(){
      event.returnValue = " 确定离开当前页面吗? " ;
}
< / script>
< / head>
< body onbeforeunload = " checkLeave() " >
< / body>
< / html>

 

 

但是onbeforeunload有个小毛病,就是页面刷新时,他还是会调用到onbeforeunload,为什么?其实刷新就相当于关闭了这个IE再重新打开的意思,因此还是会调用到onbeforeunload。

 究竟怎么解决刷新不调用onbeforeunload呢?

 网上提供很多方法,本人觉得最实用还是以下这段JS

 

window.onbeforeunload    =     function (){   
       var    n    =    window.event.screenX    -    window.screenLeft;   
       var    b    =    n    >    document.documentElement.scrollWidth - 20 ;   
       if (b    &&    window.event.clientY    <     0     ||    window.event.altKey)   
      {   
          alert( " 是关闭而非刷新 " );   
          window.event.returnValue    =     " 是否关闭? " ;
      } else {
             alert( " 是刷新而非关闭 " );   
     }   
}
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的表单的时候。 

  示例:

< html xmlns = " " >
< head >
< meta http - equiv = " Content-Type "  content = " text/html; charset=gb2312 "   / >
< title > onunload测试 < / title>
< script >
   function  checkLeave(){
     alert( " 欢迎下次再来! " );
   }
< / script>
< / head>
< body onunload = " checkLeave() " >
< / body>
< / html>

 

转载于:https://www.cnblogs.com/ethan-qi/archive/2012/11/02/2751278.html

你可能感兴趣的文章
科研过程
查看>>
180316
查看>>
HDU 2604
查看>>
.NET Core微服务之基于Exceptionless实现分布式日志记录
查看>>
unity3d IL2CPP for android
查看>>
(一) Go的基本类型
查看>>
PHP程序员的技术成长规划
查看>>
使用moment.js轻松管理日期和时间
查看>>
大白话系列之C#委托与事件讲解(三)
查看>>
php分享十五:php的命令行操作
查看>>
团体程序设计天梯赛-练习集-L1-035. 情人节
查看>>
PAT-树的同构
查看>>
【C和指针】数据
查看>>
EF6+MySql 软件配置环境 EF连接不到mysql问题 实体数据模型向导 选不到mysql
查看>>
《Head first设计模式》学习笔记 – 迭代器模式
查看>>
大家赶快升级到quartus ii 11.0吧,现在文字编辑器又支持中文啦
查看>>
方法该返回接口还是具体类,以及面向接口编程
查看>>
[BTS] Error in Check Transaction: 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))...
查看>>
数据库范式
查看>>
mysql存储引擎innodb、myisam区别
查看>>