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 相关文章推荐
JavaScript 实现??打印?理
Apr 28 Javascript
Javascript isArray 数组类型检测函数
Oct 08 Javascript
select 控制网页内容隐藏于显示的实现代码
May 25 Javascript
javascript中删除指定数组中指定的元素的代码
Feb 12 Javascript
js函数的引用, 关于内存的开销
Sep 17 Javascript
js简单实现标签云效果实例
Aug 06 Javascript
JS简单实现城市二级联动选择插件的方法
Aug 19 Javascript
bootstrap paginator分页前后台用法示例
Jun 17 Javascript
Vue应用部署到服务器的正确方式
Jul 15 Javascript
jQuery实现使用sort方法对json数据排序的方法
Apr 17 jQuery
jQuery实现简易QQ聊天框
Feb 10 jQuery
vue3+typescript实现图片懒加载插件
Oct 26 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
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
php简单实现快速排序的方法
2015/04/04 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
ionic3双击返回退出应用的方法
2019/09/17 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
pow在python中的含义及用法
2019/07/11 Python
文秘专业大学生求职信
2013/11/10 职场文书
甜品店的创业计划书范文
2014/01/02 职场文书
2014年营销工作总结
2014/11/22 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
质检员岗位职责范本
2015/04/07 职场文书
运动会宣传稿50字
2015/07/23 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
小学数学新课改心得体会
2016/01/22 职场文书