Должен ли атрибут name быть уникальным в документе HTML? - PullRequest
55 голосов
/ 02 апреля 2011

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

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

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

Ответы [ 3 ]

47 голосов
/ 02 апреля 2011

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

Например:

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

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

 document.getElementsByName(nameValue)

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

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

document.getElementById(idvalue)

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

17 голосов
/ 02 апреля 2011

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

7 голосов
/ 02 апреля 2011

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

...