Входные атрибуты, которые могут иметь одинаковое «имя» - PullRequest
11 голосов
/ 30 марта 2012

Я заметил, что если у вас есть пара радиостанций вместе, вы должны сделать атрибут имени одинаковым на всех из них, чтобы радио работало должным образом:

  <label for="a1"><input type="radio" name="a" id="a1" value="1">1</label>
  <label for="a2"><input type="radio" name="a" id="a2" value="2">2</label>
  <label for="a3"><input type="radio" name="a" id="a3" value="3">3</label>
  <label for="a4"><input type="radio" name="a" id="a4" value="4">4</label>

Радиовведите единственный тип ввода, где у вас могут быть повторяющиеся атрибуты имени (и обязательно для этого)?Если я сделаю это на любом другом входе, браузер сочтет его недействительным, верно?

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

Ответы [ 7 ]

12 голосов
/ 30 марта 2012

С точки зрения взаимодействия с пользователем, элементы input:radio используют один и тот же [name], так что браузер знает, что только один может быть :checked одновременно.

С точки зрения отправки формы любые элементы могут иметь одинаковые имена, все они будут сериализованы в строку запроса, как определено в HTML Spec

Вот пара примеров:

<form action="/foo/bar">
    <input type="hidden" name="fizz" value="buzz" />
    <input type="radio" name="foo" value="bar" />
    <input type="radio" name="foo" value="baz" />
    <input type="submit" value="Go" />
</form>

Отправка этой формы (с установленной переключателем bar) приведет к строке запроса:

?fizz=buzz&foo=bar

Однако, если вы измените имя элемента input:hidden на foo:

<form action="/foo/bar">
    <input type="hidden" name="foo" value="buzz" />
    <input type="radio" name="foo" value="bar" />
    <input type="radio" name="foo" value="baz" />
    <input type="submit" value="Go" />
</form>

Строка запроса будет:

?foo=buzz&foo=bar

Сервер должен правильно проанализировать это, чтобы вы могли получить значения buzz и bar, однако я обнаружил, что некоторые серверные языки имеют причуды, когда дело доходит до разбора строки запроса .

В частности, PHP превратит ключи в массивы, если к ключу добавлен []:

?foo[]=buzz&foo[]=bar будет иметь $_GET['foo'] = array('buzz', 'bar');

9 голосов
/ 30 марта 2012

Является ли радиовход единственным типом входа, где вы можете иметь повторяющиеся атрибуты имени

Нет.Любой элемент управления формой может делить имя с любым другим элементом управления формой.

Это особенно полезно для флажков (это позволяет вам сказать «Выберите любое число из них», а затем перебрать результаты на сервере без необходимостижестко запрограммируйте другое имя для каждого элемента.) и кнопки отправки (это позволяет указать, какое из них было нажато, без зацикливания всех возможных имен).

(и требуется для этого)?

Да.Только переключатели получают специальное поведение, основанное на общих именах.

2 голосов
/ 30 марта 2012

Вполне допустимо иметь одинаковое значение для атрибутов имени на страницах.

Распространенным резервным вариантом для флажков является наличие скрытого ввода с тем же именем со значением, установленным на false. При использовании одних и тех же значений имени, чтобы убедиться, что дважды проверен ожидаемый результат, обычно последнее проанализированное значение перезапишет все предыдущие параметры с тем же именем.

Если вам нужно сгруппировать различные поля под одним и тем же именем, вы можете создать массив из нескольких элементов, например:

<input name="list[]" />
<input name="list[]" />
<input name="list[]" />
1 голос
/ 02 ноября 2012

Вы также можете иметь несколько скрытых входов с тем же именем.Как уже указывалось, вопрос заключается в том, как инфраструктура на стороне сервера будет их анализировать.В .NET MVC механизм связывания модели будет искать коллекцию с тем же именем в параметре метода пост-действия или свойством в параметре модели представления пост-действия.Например, List<int>, List<Guid> или List<string>

См. В качестве примера: https://stackoverflow.com/a/2013915/84206

1 голос
/ 30 марта 2012

нет, существуют другие элементы управления с именем dup;)

1 голос
/ 30 марта 2012

Ну, технически все, что имеет значение, это сгенерированная строка URL. Таким образом, теоретически вы можете иметь две кнопки отправки с одинаковым именем ...

0 голосов
/ 30 марта 2012

имена или атрибуты некоторых элементов при многократном использовании просто игнорируются анализатором HTML
Например, если вы используете более одного идентификатора, считается только первый.

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