2011-08-09 65 views
1

的形式,form.name通常交回表格的名稱,但會如果窗體有一個名爲「名」在JavaScript中,獲取FORM名稱的正確方法是什麼?

 
var f = document.createElement('form'); 
f.hasAttribute('name');     // false 
f.name = 'abc'; 
f.getAttribute('name');     // "abc" 

var i = document.createElement('input'); 
i.name = 'name'; 

f.appendChild(i); 
f.name;         // HTMLInputItem 
f.getAttribute('name')     // "abc" 
f.name = 'efg'; 
f.name;         // HTMLInputItem 
f.getAttribute('name')     // "efg" 

從這個練習的元素,似乎窗體的name屬性真的是它的屬性。

這種行爲是從value

 
var i1 = document.createElement('input'); 
var i2 = document.createElement('input'); 

// test value 
i1.setAttribute('value','value1'); 
i1.getAttribute('value');     // value1 
i1.value = 'value2'; 
i1.getAttribute('value');     // value1 

i2.value = 'value1'; 
i2.hasAttribute('value')     // false 

// test name 
i.setAttribute('name','name1'); 
i.getAttribute('name');     // name1 
i.name = 'name2'; 
i.getAttribute('name');     // name2 

i2.name = 'name1'; 
i2.hasAttribute('name')     // true 

value截然不同的使用其作爲默認屬性,而form.name是首先嚐試具有element.name='name'元件的方法,然後使用attribute('name')

回答

3

有關於混亂何時以及如何訪問DOMElement object中的那些「特殊屬性」。像.name,.value,.tabIndex等。直接對象訪問來自舊時代,並在所有主流瀏覽器中運行良好。所以基本上沒有什麼不妥通過調用

form.name 

但是,正如你提到的,可能有一些麻煩,如果有被命名爲子節點。 W3C建議始終使用.setAttribute()/.getAttribute()方法。在這個特定的情況下,它可能是最好的建議。在其他情況下,我仍然可以直接訪問,因爲它寫得很少,而且對我也很方便。

+0

set/getAttribute適用於'name',但不適用於'value',對吧? –

+1

'form.name'的問題是它不能保證工作 - 一個小功能需要一些時間來追蹤。 –

+1

如果你在表單中有'「,那麼form.name將不會返回你所期望的。 – 10basetom

0

如果你想獲取表單名稱

變種名稱[] = document.getElementsByTagName( '形式')的getAttribute( '名稱')。

(或)

變種名稱=的document.getElementById( 'form_id')的getAttribute( '姓名');

+0

是的,似乎'getAttribute('name')'是要走的路 –

相關問題