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格式化数字的函数代码
Nov 30 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
Feb 05 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
Aug 19 Javascript
异步动态加载JS并运行(示例代码)
Dec 13 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
Mar 17 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
Mar 02 Javascript
在vue组件中使用axios的方法
Mar 16 Javascript
JS实现li标签的删除
Apr 12 Javascript
layui原生表单验证的实例
Sep 09 Javascript
vue实现节点增删改功能
Sep 26 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 jQuery
JS实现鼠标移动拖尾
Dec 27 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
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
jQuery使用手册之一
2007/03/24 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
使用JS 清空File控件的路径值
2013/07/08 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
python逆序打印各位数字的方法
2018/06/25 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
详解Python字典的操作
2019/03/04 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
美国最大点评网站:Yelp
2018/02/14 全球购物
linux面试题参考答案(4)
2014/09/21 面试题
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
演讲比赛主持词
2015/06/29 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
Python 如何实现文件自动去重
2021/06/02 Python
python中urllib包的网络请求教程
2022/04/19 Python