2009-09-01 47 views
7

根據SitePoint(以及我自己的實驗),「setAttribute()」的IE實現有問題且不可靠。我可以使用JavaScript設置'name'屬性嗎?

同樣根據SitePointname屬性是隻讀的。

有沒有另外一種方法可以在元素上設置name屬性?我需要這個用於單選按鈕。如果可能的話,我想要一個沒有jQuery的解決方案,因爲我目前沒有使用庫。

在此先感謝!

+1

你SitePoint參考點的屬性的名稱屬性不反對一個HTMLInputELement的名稱屬性格式,你需要用雞蛋比較蛋。 – AnthonyWJones

回答

4

Sitepoint 謊言正在討論'name'的不同用法(請參閱Anthony的評論)。它不是隻讀的,它只是存在一個長期存在的IE bug(高達v7),在表單字段上設置「名稱」只是部分有效。特別是單選按鈕不能正確接受它。

微軟認可的解決方案,as detailed here是使用的IE瀏覽器的版本的createElement通話的同時設置屬性的一個可怕的不好的特性:

var radio= document.createElement('<input type="radio" name="test" value="a" />'); 

可能是一個更好的辦法,簡直是用好老innerHTML的,例如:

var div= document.createElement('div'); 
div.innerHTML= '<input type="radio" name="test" value="a" />'; 
var radio= div.firstChild; 
+1

這看起來像將元素插入到dom中,而不是將name屬性設置給我。 – Zoidberg

+1

您*無法*在IE中設置名稱屬性。因此,這創建了一個新的無線電元素,您可以用現有的無線電元素替換現有的無線電元素。你可以在原始收音機的父母上設置innerHTML,如果這就是你所追求的;在這個問題上沒有足夠的信息可以說。 – bobince

+0

這似乎是IE中唯一可靠的方法); –

0

name屬性不是隻讀的輸入元素。

請參閱the spec

+0

您可能是對的,但似乎在IE7中無法正常工作。 –

1

您是否嘗試過簡單地爲元素分配新名稱name屬性?我不知道如何跨瀏覽器,但它的工作與任何支持DOM級別1的東西。

我不知道你爲什麼要使用setAttribute來執行此操作?

+0

我發佈了一些代碼,這樣做,併爲我工作。如果我先看到這個答案,我就不會發布它。 – Zoidberg

+0

儘管如此,代碼片段還是不錯的。 – montrealist

9

這爲我工作

alert(document.getElementById('testInput').name); 
document.getElementById('testInput').name = 'someName'; 
alert(document.getElementById('testInput').name); 

W3C DOM Compatibility - Core

<input type="radio" name="test" id="testInput" /> 
+0

在IE6/7中測試? – montrealist

+0

工作在IE 7和那個奇蹟稱爲IE 6 – Zoidberg

+1

它部分工作。然而,這並沒有改變按鈕所屬的單選按鈕組,所以如果你有,他們將保持獨立在同一頁上稱爲someName另一個輸入,如果您有名爲test的另一個輸入時,它仍然會排斥新someName控制。此外,如果您嘗試使用getElementsByName或form.someName/form.elements.someName檢索'someName',但是IE無法找到它。可能會有更多奇怪的相互作用,一般來說這是最好的避免。 – bobince

0

尋找的setAttribute的你可以嘗試使用setAttributeNode方法(而不是()。它可能在IE 6及更高版本上運行。

0

IE DOM不允許我在運行時更改名稱屬性。但是,使用jQuery更新 name屬性適用於IE。我在IE9上測試過。 有關示例,

<input id="ID0E2B" name="Field2" value="3" type="radio" /> 
$("#ID0E2B").attr("name", newName); 
相關問題