Входные атрибуты, которые могут иметь одно и то же "имя",

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

  <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>

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

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

Ответ 1

С точки зрения взаимодействия с пользователем элементы 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');

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

<input name="list[]" />
<input name="list[]" />
<input name="list[]" />

Ответ 4

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

Ответ 5

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

Ответ 6

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

См. пример: fooobar.com/questions/479004/...

Ответ 7

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