在javascript中,获取FORM名称的正确方法是什么?

时间:2011-08-09 09:17:22

标签: javascript dom attributes naming

在表单中,form.name 通常会返回表单的名称,但如果表单中有一个名为“name”的元素,则不会

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"

从这个练习中,似乎FORM的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')

的方法

2 个答案:

答案 0 :(得分:3)

关于何时以及如何从DOMElement object访问这些“特殊属性”存在困惑。与.name.value.tabIndex等一样。直接对象访问来自过去,在所有主流浏览器中都可以正常使用。所以基本上通过调用

没有错
form.name

但正如您所提到的,如果有名为子节点,可能会有一些麻烦。 W3C建议始终使用.setAttribute() / .getAttribute()方法。在这个特殊的例子中,它可能是最好的建议。在其他情况下,我仍然可以直接访问,因为它写起来更少,而且对我来说也很方便。

答案 1 :(得分:0)

如果您想获取表单名称

  

var names [] =   document.getElementsByTagName( '形式')的getAttribute( '名称');

(或)

  

var name = document.getElementById('form_id')。getAttribute('name');