Подтвердить что ты не робот

Должен ли атрибут имени быть уникальным в документе HTML?

Я помню, как в спецификаторе я сразу же прочитал, что и атрибут id, и атрибут name используют одно и то же пространство имен и должны быть уникальными. Впредь я всегда старался выполнить это требование в своих приложениях, опасаясь даже дать те же id и name тому же элементу.

Но в последнее время я начал работать с ASP.NET MVC 3, и он (например, PHP) может использовать один и тот же атрибут name на нескольких элементах ввода, чтобы сформировать коллекцию значений на стороне сервера. Я попытался найти соответствующий раздел в спецификации, но не смог его найти. Возможно, я что-то неправильно понял или прочитал неправильную документацию?

Как это происходит? Я хочу, чтобы как можно более эффективный HTML (как 4.01, так и 5 в разных приложениях). Могу ли я использовать этот трюк без страха? Или я буду что-то нарушать и лучше придерживаться уникальных ценностей?

4b9b3361

Ответ 1

Атрибут name действителен только для элементов <form> и form (<input>, <textarea> и <select>). Он использовал, чтобы указать name для связи с парой имя/значение, которая отправляется на сообщение формы.

Например:

<input type="checkbox" name="foo" value="1" />

если флажок отправлен foo=1. В DOM вы можете ссылаться на элементы формы из коллекции form.elements, указав name в качестве индекса. Если name не является уникальным, коллекция возвращает массив элементов, а не элемент. Современная поддержка DOM для поиска элементов формы по имени:

 document.getElementsByName(nameValue)

note: он всегда возвращает массив, даже если найден только один элемент.

id атрибут из мира XML и является уникальным идентификатором для любого node, а не только элементов формы. В отличие от атрибута name он действителен для любого HTML node. Также как и атрибут name, он должен следовать правилам действительного идентификатора. Определенные должны начинаться с альфы и содержать только альфа ([a-zA-Z]), цифры, дефис, подчеркивание и двоеточия (примечание: ASP.NET нарушает это правило, запустив зарезервированные идентификаторы с подчеркиванием - таким образом, они всегда будут выходить из строя HTML/XML lint - на самом деле некоторые прокси-серверы разделяют их). Чтобы найти любой элемент HTML с помощью id, вы используете:

document.getElementById(idvalue)

это возвращает только один DOM node.

Ответ 2

Атрибут name не уникален. Например, он используется для группировки переключателей. Он представляет ценность свойства конкретной формы. id должен быть уникальным.

Ответ 3

Идентификатор должен быть уникальным, но вы можете использовать несколько элементов формы с тем же именем. Это стандартно, как работают переключатели, чтобы вы могли принудительно сгруппировать группу переключателей.