2014-05-19 29 views
1

我有html表單,其中包含名稱爲id的輸入標籤 由於某種原因,jQuery將此字段映射到表單id屬性。 如果選中下面你將簡單的HTML會發現jQuery將輸入name = id元素映射到form.id屬性,爲什麼?

$('#f1')[0].id = [input element]#inputid 
$('#f2')[0].id = "f2" 

有誰知道爲什麼,或者是一個錯誤,並且沒有任何人知道的jQuery名稱= id元素映射到表?

<html> 
<head> 
    <title>Strange jQuery FORM.id behavior</title> 
    <script src="http://code.jquery.com/jquery-1.11.0.min.js" type= 
    "text/javascript"></script> 
</head> 

<body> 
    <form id="f1" name="f1"> 
     <input id="inputid" name="id" value="ID"> 
    </form> 

    <form id="f2" name="f2"> 
     <input name="key" value="KEY"> 
    </form> 
</body> 
</html> 

的jQuery移動將嘗試使用這個form.id字符串,如果你的表單包含名稱= ID輸入失敗...

試過大多數瀏覽器,jQuery的verisons,相同的結果。

編輯:
對不起 - 只檢查jQuery的,不是jQuery的手機竊聽器,這已得到糾正MAR-12。 不在1.4.2不過,當用的getAttribute( 'ID')修補,而不是它的工作原理...

https://github.com/jquery/jquery-mobile/commit/9ff610de479097c85ec7289e67fc656e5581d817

+4

不要給你的輸入名稱'ID'。 – j08691

+0

這不是相對於jQuery –

回答

4

這其實是無關的jQuery。

問題是,在DOM中,窗體中的元素可作爲窗體的屬性訪問,其name屬性作爲關鍵字。這被記錄在in the HTML5 spec(不適合讀者友好)。在確定屬性值時,此值將覆蓋id屬性的值。

這也是name屬性其是指form元件的其它性能,如submitreset,甚至name真。 (轉到this jsFiddle,並期待在錯誤控制檯您點擊鏈接,查看該問題後。)

這是一個壞主意,讓你的表單元素name屬性屬於form元素的屬性的名稱。改爲選擇其他name

+0

+1很好的解釋。我很確定這已經在SO上被覆蓋了。任何想法,如果有這樣的規範問題/答案? – j08691

+0

@ j08691我相信它也有。我確信我已經寫了這樣一個答案!但我確實看過,而且找不到任何規範的外觀。 – lonesomeday

+0

問題是jquery-mobile,這個錯誤現在顯然已經得到糾正。不知道這些元素是通過HTML映射到表單屬性的。請注意,如果一個元素同時具有id和name屬性,則它將映射到表單。[name]屬性,如果它只有id,則映射到表單。[id]屬性 – jorese

相關問題