2012-06-20 4 views
14

У меня есть веская причина для этого, но это долгая история, поэтому я забуду пробовать объяснить, почему и просто спросить, нормально ли это делать.Можно ли иметь несколько HTML-форм с тем же именем?

У меня есть страница, где мне нужно иметь несколько форм с тем же именем, но мне нужна только форма, кнопка отправки которой нажата для отправки. Например, на моей странице могут быть следующие данные:

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

text 

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

text 

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

Это приемлемо?

+0

http://validator.w3.org – BalusC

+0

http://www.onlinewebcheck.com обнаруживает ошибки дубликата имени формы в документах HTML5. –

+0

Зачем использовать 'имя формы' вообще: http://stackoverflow.com/questions/ 8946320/whats-the-point-of-html-forms-name-attribute –

ответ

15

Что касается спецификации HTML 4.01, вы можете использовать элементы form с тем же атрибутом name, поскольку на них нет требования к уникальности. Тем не менее, это наносит ущерб назначению таких атрибутов. Они предназначены для упрощения ссылки на формы на клиентских сценариях: если у вас есть <form name=foo>, то document.foo относится к этой форме.

Не определено, что происходит при использовании такого же атрибута name, но, по-видимому, браузеры возвращают массив. В вашем примере document.foo будет 3-элементным массивом, причем document.foo[0] будет первой формой. Но это не полезно, поскольку (если в документе нет других форм), вы можете использовать document.forms[0] с четко определенным значением.

Атрибут name устарел для form элементов (но не для полей формы, где он по-прежнему необходим). HTML 4.01 spec clause on form говорит:

«name = CDATA [CI] Этот атрибут именует элемент так, чтобы его можно было обращаться из таблиц стилей или скриптов. Заметка. Этот атрибут был включен для обратной совместимости. Приложения должны использовать атрибут id для идентификации элементов. »

В черновиках HTML5 даже формальные правила запрещают использование одного и того же атрибута name. HTML5 clause on the name attribute on form говорит, что его значение «должно быть уникальным среди элементов form в коллекции forms, в котором оно находится, если оно есть». Это запутанная формулировка, но наиболее безопасно предположить, что она должна быть уникальной в пределах элементов form документа.

+0

Немного о document.foo для случая с несколькими совпадающими именами, которые не определены, не является тем, что раздел 3.1.4. Атрибуты дерева DOM из http://dev.w3.org/html5/spec/dom.html#dom-document -namedItem - который в конце 3.1.4 определяет? – Alohci

+0

@Alohci, это не определено в текущих спецификациях. Проекты HTML5 определяют механизм для этого, но также накладывают требование уникальности. –

+0

Да, справедливая точка. Дискуссии о том, что такое HTML 4, что такое HTML5 и какие пользовательские агенты * делают *, учитывая, что у них нет отдельных режимов HTML 4 и HTML5, иногда становится очень сложным. – Alohci

10

Да, это разрешено, только id 's должен быть уникальным. Однако я бы не рекомендовал, почему бы даже поставить себя в замешательство по дороге.

Атрибут name определяет только, какой элемент поля формы будет представлен, как при отправке на сервер.

+5

Атрибут 'name' элемента' form' не влияет на данные, отправленные на сервер.Возможно, вы путали его с атрибутами 'name' для полей формы. –

0

Когда пользователь нажимает кнопку отправки, только эта форма будет принята в действие. Тем не менее, лучше называть их так, чтобы вы не путались :)

1

Это также нормально в HTML5. Только имя должно быть уникальным внутри самой формы.

См. Документы: «Значение не должно быть пустой строкой, а значение должно быть уникальным среди элементов формы в коллекции форм, в которой она находится, если таковая имеется».

+1

Это может ввести в заблуждение. В HTML5 [W3C требует] (https://www.w3.org/TR/html5/forms.html#attr-form-name) ** ** имя 'формы ', чтобы быть уникальным в коллекции форм , если таковые имеются. Но элементы '' name 'в форме могут быть [любая непустая строка] (https://www.w3.org/TR/html5/forms.html#attr-fe-name), кроме \ __ charset \ __ и _isindex_. – Qdeep

Смежные вопросы