在写脚本的过程,有以下几个大的 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 没有上述问题