IE 核心對於執行 javascript 的幾個嚴重 BUG

來源:互聯網
上載者:User

 在寫指令碼的過程,有以下幾個大的 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 沒有上述問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.