正常获取表单的ID值的语法为:<表单对象>.id,这个大家都知道。不过下面的代码,看看会返回什么:
- <form?id="create_data">??? ??
- ??<input?type="hidden"?name="id"?value="hello"/>??? ??
- </form>??? ??
- <script?type="text/javascript">??? ??
- ??alert(document.getElementById('create_data').id);???? ??
- </script>???
弹出对话框在IE下显示的内容为“[object]”,这个对象是那个名字为id的INPUT元素,FF还没有测试,估计也是出错。:(
大家在开发程序的时候一定要注意哟!!!
1 楼
simon1118
2007-10-29
呵呵,楼主真是细心啊~!
2 楼
weishuwei
2007-10-29
晕死,这个当然要返回一个对象啊,你又不是求值的.alert(document.getElementById('create_data').id.value);你试一下
3 楼
weiqingfei
2007-10-29
能把元素名取为“id”的人也是蛮有创意的人。
4 楼
ajaxgo
2007-10-29
二楼不要不知根源的在那里乱说
实际情况是这样的,lz最后的考虑也有错,在FF下是不会错的。
因为在ie下,可以通过"表单对象.字段name"来直接访问表单里的字段对象,即form.fieldName,所以上例中,当获得了表单对象后,其中的id属性其实已经变成了那个input控件,于是访问后得到[object]那是正常的。而如果根据二楼所说,要加.value那是什么情况呢?当然是取得那个input控件的value属性值。
由于这个是ie下的特有方式,所以在ff下,不会产生上述的情况,object.id返回的,还是正常的元素id号。
实际情况是这样的,lz最后的考虑也有错,在FF下是不会错的。
因为在ie下,可以通过"表单对象.字段name"来直接访问表单里的字段对象,即form.fieldName,所以上例中,当获得了表单对象后,其中的id属性其实已经变成了那个input控件,于是访问后得到[object]那是正常的。而如果根据二楼所说,要加.value那是什么情况呢?当然是取得那个input控件的value属性值。
由于这个是ie下的特有方式,所以在ff下,不会产生上述的情况,object.id返回的,还是正常的元素id号。
5 楼
afcn0
2007-10-29
ls不是那样的,不管getELementById或者getElementsByTagName不论ie ff都会把下属元素的id name扩展为自己的属性,所以alert(document.getElementById('create_data').id);在ff下一定会得到input元素,这是毫无疑问的,看下面代码
这个才是bug,ie还是扩展length导致无法遍历元素,而ff却保护了length属性,没有覆盖,id被覆盖很正常,你可以getAttribute吗
<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吗
6 楼
fyting
2007-10-30
把名字取成id的少见,但把按钮id取成submit的不少...
7 楼
lianwu
2007-10-30
名字取成ID的确实牛NR
8 楼
afcn0
2007-10-30
其实没什么大不了,lz说的".id"根本不是标准方法,那是在没有DOM之前的DOM 0级API,正确方法是getAttribute,当然就是今天ie也不支持setAttribute的事件绑定,这些老API设计时多少都有点bug
9 楼
无聊神灯
2007-10-30
alert(document.getElementById('create_data')["id"]);
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下
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??希望有人指点....
因为: document.getElementById('create_data').id.nodeName 返回的是INPUT. 当你把INPUT BOX的NAME改为比如'ID1'的时候,document.getElementById('create_data').id返回的就是'create_data'了.
这背后说明了什么?ACCESS其他ELEMENTS先于ACCESS PROPERTIES??希望有人指点....
12 楼
afcn0
2007-11-01
是ie混淆attribute和对象属性,ff下面getAttribute最标准,id是不会返回对象的
13 楼
metaphy
2007-11-01
有一种东西,叫做关键字,还有一种东西,叫做保留字
14 楼
slaser
2007-11-05
<input name="id"/>这样的东西我还是经常用的,没办法嘛,数据库里面对应的pk一般就叫id.只是我不会去读form的id,这个有什么实用价值么?
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
See: https://bugzilla.mozilla.org/show_bug.cgi?id=322488
See also: http://topic.csdn.net/t/20060118/23/4524484.html
16 楼
zjh0588
2007-11-09
请问ArrayList<String[]> list ,javascript能描述出里面的数据吗?
17 楼
yipsilon
2007-11-29
list的,在js里不就是数组么。[1, 2, 3, 4, 5]
map的,在js里是litral。{name:'hello',value:'world'}
map的,在js里是litral。{name:'hello',value:'world'}
18 楼
cai555
2007-12-10
建议使用:document.getElementById('create_data').getAttribute("id", 0)