当前位置: 首页 > 图文教程 > 网络编程 > Javascript > window.onbeforeunload方法在IE下无法正常工作的解决办法

Javascript
jquery 交替为表格添加样式的代码
jquery下操作HTML控件的实现代码
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
海量经典的jQuery插件集合
JavaScript获取鼠标坐标的函数(兼容IE、FireFox、Chrome)
JavaScript关于select的相关操作说明
jQuery的一些特性和用法整理小结
用jQuery扩展自写的 UI导航
JQuery 引发两次$(document.ready)事件
javascript实现的基于金山词霸网络翻译的代码
Span元素的width属性无效果原因及解决方案
javascript 不间断的图片滚动并可点击
利用onresize使得div可以随着屏幕大小而自适应的代码
extjs 为某个事件设置拦截器
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
javascript 特性检测并非浏览器检测
20个非常有用的PHP类库 加速php开发
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
AJAX的跨域与JSONP(为文章自动添加短址的功能)
JavaScript学习笔记(十)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-02-27   浏览: 432 ::
收藏到网摘: n/a

下面的代码可以做到不管用户是点击了关闭,或者是在任务栏关闭、点击后退、刷新、按F5键,都可以检测到用户即将离开的消息。 事件的起因是由于在工作中有客户反映,常常会有用户在浏览网页的过程中订购了商品,但是由于用户一下子打开的窗口过多,又或者在敲打键盘时,错误地按到了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快照,源文链接已找不到,本来想翻译的,但是本人水平实在有限,看得懂而已,如果翻译得不好反而招骂,如果朋友们想看源文,请直接点击这里,这是快照地址,可能一段时间后就不存在了。