两个让人无语的IE BUG

两个让人无语的IE BUG
很多人总是拿IE的安全说事,其实多数是人的问题,而IE对HTML/CSS的处理上的BUG才是最令人头痛的,特别是那些毫无逻辑性而言的问题,下面的两个就是。

BUG 1 - IE6居然分不清name和id

最简化重现代码:
<!-->
<html>
<head>
<title>Test</title>
</head>
<body>
<input name="txt" type="radio">
<input name="txt" type="radio">
<input name="txt" type="radio">
<p id="txt">Hello</p>
<script type="text/javascript">
 alert(document.getElementsByName('txt').length);
</script>
</body>
</html>
<-->

逻辑很简单,我希望用js得到该页面名为txt的单选框个数:document.getElementsByName('txt').length。猜猜IE6会显示多少:4。因为IE6把id=txt的元素也算上了。貌似这个BUG很好发现原因,但真实的HTML页面元素很多,不费一番功夫不会想到这是IE的问题。

解决办法:当你需要使用getElementsByName函数时,千万不要让页面的name元素和某元素的id重名。

BUG 2 - 使用带背景的iframe元素导致iframe产生怪异的行为

如果重现上面那个BUG只要睁大眼睛的话,下面这个BUG会另你试图给身边的朋友推荐Firefox。

最简化重现代码:

把以下内容保存为page.html
<!-->
<html>
<head>
<title>Test</title>
</head>
<body>
<div>
Test
<iframe height="100" src="frame.html" width="100%"></iframe>
</div>
</body>
</html>
<-->

把以下内容保存为frame.html
<!-->
<html>
<head>
<title>Frame</title>
<script type="text/javascript">
function check_submit(frm)
{
 document.getElementById('btn').disabled=true;
 return true;
}
</script>
<style type="text/css">

#btn{
 background: url('btn.gif') no-repeat;
}

</style>
</head>
<body>
<form action="frame.html" method="post" οnsubmit="return check_submit(this)">
<input id="btn" type="submit" value="Test" />
</form>
</body>
</html>
<-->

然后准备一个btn.gif文件,把btn.gif、page.html和frame.html上传到同一文件夹,访问page.html文件。

这个组合为了实现一个效果:page.html中使用iframe包含一个表单,用户在 iframe 中的表单(由frame.html输出)提交表单(一个例子就是donews首页顶部的登录iframe),在提交后禁用提交按钮防止重复提交。但是就这样一个简单的思路在IE中会出现起个奇怪的行文:当表单提交完全完成后,IE的状态栏会出现一个从0开始的新进度条,要等将近2分钟才会消失。

为了挖出上面的最简话代码,我花费了整整一下午的时间,从庞大的web应用中剔除无关的代码,保存同样无关的代码。导致这个BUG的表面原因是document.getElementById('btn').disabled=true;一句,当试图在提交表单后禁止该button(或访问表单任意元素的属性)时就会产生这个现象。但真正的罪魁是btn的背景,当删除#btn中的background: url('btn.gif') no-repeat;(或设置一个不存在的文件做背景)后,这个BUG就会自行消失,看来那个进度条是在试图加载btn.gif文件。

解决办法:当你需要提交iframe中的表单时,要么不要修改iframe中的其它元素属性(包括不能禁用提交按钮防止重复提交),要么不要给提交按钮或其它iframe元素设置背景。这对开发一个重视美术效果的网站确实是无理的要求。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值