Элементы формы как свойства формы - PullRequest
3 голосов
/ 28 июня 2011

Если у вас есть элемент формы внутри формы и этот элемент имеет name или id, вы можете получить к нему доступ непосредственно из элемента DOM формы как свойство с таким именем.Такое поведение представляется очень широко поддерживаемым.Охвачено ли оно какой-либо спецификацией, и если да, то какой?

Это поведение для elements коллекции формы указано в спецификации HTML DOM2, но я не сразу вижубизнес выгрузки элементов как свойств в самой форме, указанной где угодно, кроме фразы "Он обеспечивает прямой доступ к элементам управления содержащейся формы, а также к атрибутам элемента формы." здесь предназначено для того, чтобы сказать это (если да, ничего себе, я понимаю, что это относится к коллекции elements).Я предполагаю, что это просто устаревшее поведение.

Для ясности: я не спрашиваю, каков наилучший способ доступа к полям формы, я спрашиваю, охватывается ли это поведение стандартом.(Я также избегаю всего, что происходит с объектом window; это совсем другая тема.)

Пример ( живая копия ):

HTML:

<form id="theForm">
<input type="text" name="field1" value="foo">
<input type="text" id="field2" value="bar">
</form>

JavaScript:

var f = document.getElementById("theForm");
console.log(f.elements.field1.value); // "foo", per spec
console.log(f.field1.value);          // also "foo"
console.log(f.elements.field2.value); // "bar", per spec
console.log(f.field2.value);          // also "bar"

Я проверил IE6, 7, 8 и 9, Firefox 4.0, Firefox 3.6, Chrome 12, Opera 11 и Safari5. Все они делают это (делают поля формы доступными в обоих местах).

Ответы [ 3 ]

1 голос
/ 28 июня 2011

Нашел в черновой спецификации HTML5 :

Когда элемент form проиндексирован для поиска по индексированному свойству , пользовательский агент должен вернутьзначение, возвращаемое методом item в коллекции elements, когда вызывается с указанным индексом в качестве аргумента.

Каждый элемент form имеет отображение имен на элементы, называемые pastкарта имен .Он используется для сохранения имен элементов управления, даже когда они меняют имена.

Поддерживаемые имена свойств - это объединение имен, в настоящее время поддерживаемых объектом, возвращаемым атрибутом elements, и имен, которые в настоящее время находятся в прошломКарта имен.

Когда элемент form проиндексирован для поиска именованного свойства , пользовательский агент должен выполнить следующие шаги:

  1. Если name является одним из поддерживаемых имен свойств объекта, возвращаемого атрибутом elements, затем выполните следующие подэтапы:

    1. Let кандидат быть объектом, возвращаемым методом namedItem() для объекта, возвращаемого атрибутом elements при передаче аргумента name .

    2. Если кандидат - это элемент, затем добавьте отображение из name в кандидат в карте прошлых имен элемента form, заменив предыдущую запись с тем же именем, если оно есть.

    3. Возврат Кандидат и прервите эти шаги.

  2. В противном случае name - это имя одной из записей в прошлых именах элемента formкарта: возвращает объект, связанный с name на этой карте.

Если элемент, указанный в карте прошлых имен form элемента, удаляется из Documentзатем его записи должны быть удалены с карты.

... и мы знаем из раздела спецификации HTML *1079* DOM2 * о сопоставлении языка ECMAScript, что индексация с помощью [] заканчиваетсябыть звонком либо item (для чисел), либо namedItem (для строк).

Спасибо @Carey за его ответ на мой другой связанный с этим вопрос , который сделал меня лицом к лицуи посмотрите на черновик HTML5, так как они пытаются включить в спецификацию HTML DOM.

0 голосов
/ 28 июня 2011

От ДОМ 2 (мой акцент):

Элемент FORM включает в себя поведение, аналогичное коллекции и элементу. Он обеспечивает прямой доступ к элементам управления формы , а также к атрибутам элемента формы.

Это немного нечетко сформулировано, но оно охватывает поведение, которое вы видите.

0 голосов
/ 28 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...