对非表单元素(比如div)应用getElementById()一般是安全的,但是Opera中会有问题:

<div name="div">1</div>
<div id="div">2</div>
<script type="text/javascript">
    alert(document.getElementById(
"div").innerHTML);
</script>

Opera连name也拿,所以拿到的innerHTML是1。

对于表单元素(比如input),Opera和IE会有同样的问题:

<input type="text" name="inputText" value="a" />
<input type="text" id="inputText" value="b" />
<script type="text/javascript">
    alert(document.getElementById(
"inputText").value);
</script>

Opera和IE拿到的value是a。

结论:

  • IE 6:对于表单元素,getElementById()返回第一个name符合或id符合的元素;
  • IE 7:和IE 6相同;
  • Firefox 2.0.0.8:正常;
  • Opera 9.24:对于所有元素,getElementById()返回第一个name符合或id符合的元素;
  • Safari 3.0.3:正常。

在制作很复杂的表单时,需要注意这个问题。id和name的命名最好要规范。

Posted on 2007-10-26 16:16 笼民 阅读(889) 评论(6)  编辑 收藏 所属分类: JavaScript

Feedback

#1楼    回复  引用  查看    

2007-10-26 17:45 by 丁学      
好像确实有这个问题,不过以前没遇到过,除了class其他在同一页面中不会出现重名

#2楼    回复  引用    

2007-10-27 21:50 by 曾航 [未注册用户]
老颜还是没变,对技术如此执着,佩服佩服

#3楼    回复  引用    

2008-01-31 14:34 by 大鹏周游世界 [未注册用户]
这也仅仅只能说名是处理bug,不能说缺陷。js的dom模型操作事实上只要遵循标准,应该都是对的。
只是各个浏览器容错性导致这些小问题。

#4楼 [楼主]   回复  引用  查看    

2008-01-31 21:41 by 笼民      
恩。我不是说JavaScript语言本身有缺陷,而是说浏览器的JavaScript实现有一些奇怪的行为。

如果讨论DOM标准本身,基本上用处不大。我这里谈的显然都是浏览器的DOM实现的问题。

#5楼    回复  引用  查看    

2008-07-20 00:19 by FEIM Studios      
嗯,谢谢提醒。

#6楼    回复  引用    

2008-08-01 11:29 by Savage.zhang [未注册用户]
在吾辈的IE7下并未发现getElementById取到name的现象,想来MS在某个版本中已经修正了这个情况

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-12-21 21:18 编辑过


相关链接: