在表单中,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')
答案 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');