в javascript сделать, как правильно получить имя ФОРМА? - PullRequest
1 голос
/ 09 августа 2011

в форме, 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 ]

3 голосов
/ 09 августа 2011

Существует путаница, когда и как получить доступ к этим видам «специальных свойств» из DOMElement object.Например, .name, .value, .tabIndex и т. Д. Прямой доступ к объектам был создан с давних времен и прекрасно работает во всех основных браузерах.Так что, в принципе, в вызове

form.name

нет ничего плохого. Но, как вы упомянули, могут возникнуть некоторые проблемы, если есть именованные дочерние узлы.W3C рекомендует всегда использовать методы .setAttribute() / .getAttribute().В данном конкретном случае это, вероятно, лучший совет, чтобы дать.В других случаях я по-прежнему пользовался бы прямым доступом, так как писать было бы гораздо меньше, а также было бы удобно для меня.

0 голосов
/ 09 августа 2011

Если вы хотите получить имя формы

var names [] = document.getElementsByTagName ( 'форма') GetAttribute ( 'имя');.

(или)

var name = document.getElementById ('form_id'). GetAttribute ('name');

...