论坛首页 Web前端技术论坛

JavaScript 中一个比较无奈的问题,大家注意了!

浏览 7797 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-29  

正常获取表单的ID值的语法为:<表单对象>.id,这个大家都知道。不过下面的代码,看看会返回什么:

  1. <form id="create_data">      
  2.   <input type="hidden" name="id" value="hello"/>      
  3. </form>      
  4. <script type="text/javascript">      
  5.   alert(document.getElementById('create_data').id);       
  6. </script>   

弹出对话框在IE下显示的内容为“[object]”,这个对象是那个名字为id的INPUT元素,FF还没有测试,估计也是出错。:(

大家在开发程序的时候一定要注意哟!!!

   发表时间:2007-10-29  
呵呵,楼主真是细心啊~!
0 请登录后投票
   发表时间:2007-10-29  
晕死,这个当然要返回一个对象啊,你又不是求值的.alert(document.getElementById('create_data').id.value);你试一下
0 请登录后投票
   发表时间:2007-10-29  
能把元素名取为“id”的人也是蛮有创意的人。
0 请登录后投票
   发表时间:2007-10-29  
二楼不要不知根源的在那里乱说
实际情况是这样的,lz最后的考虑也有错,在FF下是不会错的。
因为在ie下,可以通过"表单对象.字段name"来直接访问表单里的字段对象,即form.fieldName,所以上例中,当获得了表单对象后,其中的id属性其实已经变成了那个input控件,于是访问后得到[object]那是正常的。而如果根据二楼所说,要加.value那是什么情况呢?当然是取得那个input控件的value属性值。
由于这个是ie下的特有方式,所以在ff下,不会产生上述的情况,object.id返回的,还是正常的元素id号。
0 请登录后投票
   发表时间:2007-10-29  
ls不是那样的,不管getELementById或者getElementsByTagName不论ie ff都会把下属元素的id name扩展为自己的属性,所以alert(document.getElementById('create_data').id);在ff下一定会得到input元素,这是毫无疑问的,看下面代码
<input id="length" value="22" type="text" />
<input id="aaa" name="bbb" type="reset" />
<script>
alert(document.getElementsByTagName("input").length)
</script>

这个才是bug,ie还是扩展length导致无法遍历元素,而ff却保护了length属性,没有覆盖,id被覆盖很正常,你可以getAttribute吗
0 请登录后投票
   发表时间:2007-10-30  
把名字取成id的少见,但把按钮id取成submit的不少...
0 请登录后投票
   发表时间:2007-10-30  
名字取成ID的确实牛NR
0 请登录后投票
   发表时间:2007-10-30  
其实没什么大不了,lz说的".id"根本不是标准方法,那是在没有DOM之前的DOM 0级API,正确方法是getAttribute,当然就是今天ie也不支持setAttribute的事件绑定,这些老API设计时多少都有点bug
0 请登录后投票
   发表时间:2007-10-30  
alert(document.getElementById('create_data')["id"]);     
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics