2013-10-16 25 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 –