`
yipsilon
  • 浏览: 242292 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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

阅读更多

正常获取表单的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还没有测试,估计也是出错。:(

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

分享到:
评论
18 楼 cai555 2007-12-10  
建议使用:document.getElementById('create_data').getAttribute("id", 0)
17 楼 yipsilon 2007-11-29  
list的,在js里不就是数组么。[1, 2, 3, 4, 5]
map的,在js里是litral。{name:'hello',value:'world'}
16 楼 zjh0588 2007-11-09  
请问ArrayList<String[]> list ,javascript能描述出里面的数据吗?
15 楼 hax 2007-11-08  
恭喜楼主,又发现了偶曾经发现过的bug。

See: https://bugzilla.mozilla.org/show_bug.cgi?id=322488
See also: http://topic.csdn.net/t/20060118/23/4524484.html

14 楼 slaser 2007-11-05  
<input name="id"/>这样的东西我还是经常用的,没办法嘛,数据库里面对应的pk一般就叫id.只是我不会去读form的id,这个有什么实用价值么?
13 楼 metaphy 2007-11-01  
有一种东西,叫做关键字,还有一种东西,叫做保留字
12 楼 afcn0 2007-11-01  
是ie混淆attribute和对象属性,ff下面getAttribute最标准,id是不会返回对象的
11 楼 niuyuewanzi 2007-11-01  
这个例子我觉得有点意思. DOM中FORM有ID属性,且正常情况下,应该返回"create-data",但是这里返回的是INPUT 的ELEMENT,无论是IE还是FF.

因为: document.getElementById('create_data').id.nodeName 返回的是INPUT. 当你把INPUT BOX的NAME改为比如'ID1'的时候,document.getElementById('create_data').id返回的就是'create_data'了.

这背后说明了什么?ACCESS其他ELEMENTS先于ACCESS PROPERTIES??希望有人指点....
10 楼 afcn0 2007-10-30  
刚又测了下,name="id"甚至影响了getAttribute的行为
alert(document.getElementById('create_data').getAttribute("id"));和".id"以及["id"]一样

alert(document.getElementById('create_data').getAttribute("id",2));
是null,name="id"好象覆盖了原来的id属性了,原来的id属性已经丢失了在ie下
9 楼 无聊神灯 2007-10-30  
alert(document.getElementById('create_data')["id"]);     
8 楼 afcn0 2007-10-30  
其实没什么大不了,lz说的".id"根本不是标准方法,那是在没有DOM之前的DOM 0级API,正确方法是getAttribute,当然就是今天ie也不支持setAttribute的事件绑定,这些老API设计时多少都有点bug
7 楼 lianwu 2007-10-30  
名字取成ID的确实牛NR
6 楼 fyting 2007-10-30  
把名字取成id的少见,但把按钮id取成submit的不少...
5 楼 afcn0 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吗
4 楼 ajaxgo 2007-10-29  
二楼不要不知根源的在那里乱说
实际情况是这样的,lz最后的考虑也有错,在FF下是不会错的。
因为在ie下,可以通过"表单对象.字段name"来直接访问表单里的字段对象,即form.fieldName,所以上例中,当获得了表单对象后,其中的id属性其实已经变成了那个input控件,于是访问后得到[object]那是正常的。而如果根据二楼所说,要加.value那是什么情况呢?当然是取得那个input控件的value属性值。
由于这个是ie下的特有方式,所以在ff下,不会产生上述的情况,object.id返回的,还是正常的元素id号。
3 楼 weiqingfei 2007-10-29  
能把元素名取为“id”的人也是蛮有创意的人。
2 楼 weishuwei 2007-10-29  
晕死,这个当然要返回一个对象啊,你又不是求值的.alert(document.getElementById('create_data').id.value);你试一下
1 楼 simon1118 2007-10-29  
呵呵,楼主真是细心啊~!

相关推荐

Global site tag (gtag.js) - Google Analytics