window.onbeforeunload方法在IE下无法正常工作的解决办法


Posted in Javascript onJanuary 23, 2010

事件的起因是由于在工作中有客户反映,常常会有用户在浏览网页的过程中订购了商品,但是由于用户一下子打开的窗口过多,又或者在敲打键盘时,错误地按到了F5键,导致页面刷新或者不正常关闭,而这时在该网页上所做的一切操作的信息都丢失了,如果我们可以提供一个在客户信息未处理完成时的提示那该多好啊,下面的代码可以做到不管用户是点击了关闭,或者是在任务栏关闭、点击后退、刷新、按F5键,都可以检测到用户即将离开的消息。

<script type="text/javascript" language="javascript"> 
function bindunbeforunload() 
{ 
window.onbeforeunload=perforresult; 
} 
function unbindunbeforunload() 
{ 
window.onbeforeunload=null; 
} 
function perforresult() 
{ 
return"当前操作未保存,如果你此时离开,所做操作信息将全部丢失,是否离开?"; 
} 
</script>

只需要将bindunbeforunload()方法注册到要检测的页面上即可,你可以在body的onload或者document.ready中注册这个方法,在这里我们采用的是window.onbeforeunload,即是在页面即将卸载之前弹出提示框,好的,现在来测试一下,测试代码:
<html> 
<head><title>this is id onbeforunload event test</title> 
</head> 
<script type="text/javascript" language="javascript"> 
function bindunbeforunload() 
{ 
window.onbeforeunload=perforresult; 
} 
function unbindunbeforunload() 
{ 
window.onbeforeunload=null; 
} 
function perforresult() 
{ 
return"当前操作未保存,如果你此时离开,所做操作信息将全部丢失,是否离开?"; 
} 
</script> 
<body onload="javascript:return bindunbeforunload();"> 
<h1>test is start</h1> 
<input type="button" value="绑定事件" id="btnBind" onclick="return biindunbeforunload();"/> 
<input type="button" value="删除绑定事件" id="btnUnBind" onclick="unbiindunbeforunload();"/> 
</body> 
</html>

上面的代码就是我此次测试的所有代码了,现在刷新页面,嗯,很好,弹出了我们期望中的对话框。但是当我在IE下打开上述代码时,我的“删除事件绑定按钮”没有发挥作用,这让我很崩溃,国内3分之2的用户都在使用IE,特别是在使用该死的IE6、7,如果我的代码不能在IE6、7下正常的工作,那相当于我的工作是白做了,当然,奖金的那些事情就更不用想了。办法都是人想出来的,好吧,我利用一个全局变量来控制是否弹出对话框,修改后的"javascript"代码如下:
<script type="text/javascript" language="javascript"> 
var goodexit=false; 
function bindunbeforunload() 
{ 
goodexit=false; 
window.onbeforeunload=perforresult; 
} 
function unbindunbeforunload() 
{ 
goodexit=true; 
window.onbeforeunload=null; 
} 
function perforresult() 
{ 
if(!goodexit) 
{ 
return"当前操作未保存,如果你此时离开,所做操作信息将全部丢失,是否离开?"; 
} 
} 
</script>

同时调用删除绑定事件时,将变量goodexit的值更改为:true,表示用户是正常退出,这样自然不会弹出对话框了。
再测试一下,正常了,对,这就是我想要的结果!
本篇文章源于从Brandon Himes处而得,并且还是从google快照,源文链接已找不到,本来想翻译的,但是本人水平实在有限,看得懂而已,如果翻译得不好反而招骂,如果朋友们想看源文,请直接点击这里,这是快照地址,可能一段时间后就不存在了。
Javascript 相关文章推荐
gridpanel动态加载数据的实例代码
Jul 18 Javascript
JavaScript中prototype为对象添加属性的误区介绍
Oct 15 Javascript
jQuery中remove()方法用法实例
Dec 25 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
Dec 02 Javascript
JQuery Ajax WebService传递参数的简单实例
Nov 02 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
Aug 24 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
JS实现数组深拷贝的方法分析
Mar 06 Javascript
一文了解Vue中的nextTick
May 06 Javascript
vue实现鼠标经过动画
Oct 16 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
Mar 12 jQuery
JS实现扫雷项目总结
May 19 Javascript
JQuery 1.4 中的Ajax问题
Jan 23 #Javascript
用JS写的一个TableView控件代码
Jan 23 #Javascript
JQuery 操作Javascript对象和数组的工具函数小结
Jan 22 #Javascript
JavaScript 学习笔记(十四) 正则表达式
Jan 22 #Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
Jan 22 #Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
Jan 22 #Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
Jan 22 #Javascript
You might like
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
使用 php4 加速 web 传输
2006/10/09 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
js 分栏效果实现代码
2009/08/29 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
Python中使用动态变量名的方法
2014/05/06 Python
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
Python异常的检测和处理方法
2018/10/26 Python
python爬取内容存入Excel实例
2019/02/20 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
python中字符串的编码与解码详析
2020/12/03 Python
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
卫校护理专业毕业生求职信
2013/11/26 职场文书
法律七进实施方案
2014/03/15 职场文书
食品安全工作实施方案
2014/03/26 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python