2013-10-16 22 views
2

我有这个simple HTML标记:getElementById无法按预期工作?

<form id="form" action="lalala"> 
    <input type="text" id="action"/> //a reserved property name id 
    <input type="submit" id="submit"/> //same here 
</form> 

但是 - 运行:

alert(document.getElementById('form').action);

警报

enter image description here

,而不是 “LALALA” 像它应该。

似乎getElementById的道具是不是直接访问

这是为什么? .....这实际上意味着我必须知道所有表单元素的道具(为了不向后代元素提供保留的道具ID)?

回答

3

这与getElementById无关并且与HTML表单元素对象的属性有关。

保留属性名ID

它不是“保留”,它只是在默认情况下

定义。如果你有一个形式的表单控件的值,且该控制具有与表单元素具有的属性相匹配的id(或名称),则对该表单控件的引用将覆盖该属性的正常值。

当索引表单元素用于索引属性检索时,用户代理程序必须返回元素集合中item方法返回的值,并以给定索引作为参数进行调用。

- http://www.w3.org/TR/html5/forms.html#the-form-element

这很烂,但如何,因为有这样的事情形式DOM工作过。

由于该特定属性映射到属性值,因此您可以使用getAttributesetAttribute来代替它。 (这在旧的IE中不起作用(它对那些对属性进行操作的方法有一个破坏的实现),并且对于其他一些属性(比如提交方法)不起作用)。

这意味着什么,我要知道所有的表单元素的道具(为了不提供预约道具ID,以后代元素)

是。

+0

是否会发生两种道具和属性?因为我看到“行动”是一种财产,而不是一种属性。 (http://i.stack.imgur.com/WJPHB.png) –

+0

@RoyiNamir - 我说:由于该特定属性映射到属性值,因此可以使用getAttribute和setAttribute来操作它。 (这在旧的IE中不起作用(它对那些对属性进行操作的方法有一个破坏的实现),并且对于其他一些属性(比如提交方法)不起作用)。 – Quentin

4

尝试这样的:

alert(document.getElementById('form').getAttribute("action")); 
1

您可以通过属性访问:

document.getElementById('form').attributes["action"].value

1

你可以不写。在这种情况下操作,因为你要访问它扔了它的属性,而不是财产,这是一个属性,因此,你需要改为的getAttribute,它会工作:)

alert(document.getElementById('form').getAttribute("action")); 
+0

不知道为什么你被低估了,这是正确的。我看到Royi已经删除了他对此不正确的评论。 –

+0

(我没有downvote)。 –

+0

@JamieTaylor但我看到行动_is_属性,而不是属性http://i.stack.imgur.com/WJPHB.png –