用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
cityhunter172的公告
<table style="font-size:12px"> <tr> <td>想送你玫瑰,但价钱太贵;<br/> 想给你安慰,可我还没学会;<br/> 想向你下跪,戒指却在玻璃柜;<br/> 唉……………如今女孩真难追!<br/> QQ:<font style="FONT-WEIGHT: bold; FONT-SIZE: 18px; COLOR: red">4638484</font><br> <a target="_blank" href="http://172.meibu.com/">寒羽枫个人主页</a> <br/> <a target="_blank" href="http://cityhunter172.photo.163.com">寒羽枫个人相册(网易)<br/> <img src="http://blog.csdn.net/images/blog_csdn_net/cityhunter172/168558/r_my01.jpg"></a> </td> </tr> </table>
文章分类
存档

原创  IE 内核对于执行 javascript 的几个严重 BUG 收藏

 在写脚本的过程,有以下几个大的 BUG ,害我找答案找了 N 久。现把它写出来,希望大家少走点弯路。

 注: IE 6.0 以下版本会出现, 7.0 没测试过

一、文本转换成数字,parseInt 在 IE 中有一个严重的 BUG
        alert(parseInt("8")) → 执行结果为  0
        解决方法:改成  parseFloat("8").toFixed(0) → 保留小数点后 0 位数,即整数

二、document.getElementById 的方法执行有误
       document.all 在其它浏览器中不支持,所以我用的最多的是 document.getElementById。但是我发现,当控件的 ID 与名称相同的时候,document.getElementById 就出现错误了。例如:
       <input id="Txt_Name01" name="Txt_Name">
       <input id="Txt_Name" name="Txt_Name">
alert(document.getElementById("Txt_Name").id) 执行结果是  "Txt_Name01"
以此推断:document.getElementById 在 IE 中,先以 name 由上而下进行查找,没有找到控件的时候才以 id 进行查找。
解决方法,用另一方法代替。
document.getObjectById = function(id)
{
    if(document.all)
    {
        var obj = document.getElementById(id);
        if(obj == null){return null;}
        if(obj.id == id){return obj;}
        obj = document.getElementsByName(id);
        for(var i=0;i< obj.length;i++)
        {
            if(obj[i].id == id){return obj[i];}
        }
        return null;
    }
    else{return document.getElementById(id);}
}

三、 通过 select 节点的 innerHTML 设置下拉节点无效
        当两个 select 下拉框需要进行复制时,一个最快捷的方式就是用 innerHTML ,但 IE 的 BUG 却让我无话可说。例如:把 DDL_Dept 的下拉节点复制到 DDL_Dept02
<select id="DDL_Dept">
     <option>01</option>
     <option>02</option>
</select>
<select id="DDL_Dept02" style="width:20px">
     <option>03</option>
</select>

function CloneNode()
{
     var d1=document.getElementById("DDL_Dept");
     var d2=document.getElementById("DDL_Dept02");
    //d2.innerHTML = d1.innerHTML; 此句应该是最快的,但无效,只好变通一下了
    d2.innerHTML =""; //这句却是可以的,真是无语
    var re = /(<\/SELECT>)/gi;
    var t = d2.outerHTML.replace( re ,""); //先去掉</SELECT>
    d2.outerHTML = ot + d1.innerHTML+"</SELECT>";//再加上组合好的内容
}

以上代码只在 IE 内核的浏览器出现,FireFox 没有上述问题

发表于 @ 2009年02月04日 13:35:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:推荐兼容 IE、 FireFox 的 javascript 日历控件 | 新一篇:兼容 FireFox 的 js 日历——支持时间的获取

  • 发表评论
  • 评论内容:
  •  
Copyright © cityhunter172
Powered by CSDN Blog