одноименные радиополя - PullRequest
0 голосов
/ 10 апреля 2011

Извините, но я понятия не имею, как это называется, поэтому я попытаюсь объяснить это.

С HTML-формами вы можете иметь поля ввода с одинаковым именем, с автоматически назначаемыми клавишами для каждогонапример,

<form action="somepage" method="post">
<input type="text" name="phone[]" />
<input type="text" name="phone[]" />
<input type="submit" />
</form>

при отправке этой формы сервер получает данные через POST.

в виде ассоциативного массива, который выглядит следующим образом:

Array(
[phone] => Array ( [0] => 123456789 [1] => 987654321 )
)

где ключи 0,1 даются автоматически.

как бы вы поступили так же с радиополями?

<input type="radio" name="option[]"/>
<input type="radio" name="option[]"/>

рассматривает оба поля как одно (как и должно быть), а недавая ему уникальные ключи ...

Ответы [ 4 ]

0 голосов
/ 12 апреля 2017

Я делал нечто подобное в VueJS, где я дублировал набор полей заданных вопросов х количество раз.Мне нужно, чтобы значения обрабатывались php как массивы, поэтому атрибуты имен имели name_x[] name_y[] и т. Д.

Это вызывало проблемы с дублированными переключателями, позволяющими получить ответ только на вопрос набора полей во всех случаях

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

Простой пример с использованием индекса (0,1,2...) вместо того, чтобы оставить пустым []:

<fieldset v-for="(question,index) in questions">
  <label> question </label>
  <input name="question[index]" type="radio" value="yes">
  <input name="question[index]" type="radio" value="no">
</fieldset>
0 голосов
/ 10 апреля 2011

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

 <input type="radio" name="option[1]" />
 <input type="radio" name="option[2]" />

вы все еще собираетесь получить только один элемент в массиве опций

в приведенном выше примере переключатели не будут работать правильно, они больше не будут работать так, как переключатели, если бы каждый из них был отдельным радио. См. это ДЕМО

Моя точка зрения заключается в том, что радиокнопка - это выбор элемента, когда вы предоставляете пользователю ряд вариантов, позволяющих ему выбирать только ОДИН, поэтому публиковать любые другие данные, относящиеся к радиокнопке, не имеет смысла, поскольку все, что вас волнует есть то, что есть выбор.

0 голосов
/ 11 апреля 2011

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

В большинстве библиотек обработки форм вы можете получить данные из нескольких элементов с одинаковыми именами, представленных в виде массива.

В PHP вы можете получить данные, представленные в виде массива, только если имя оканчивается на [] (или [something] для массивов с предопределенными индексами).

Только проверенные радиокнопки могут быть успешными, и только одна радиокнопка в группе может быть проверена (это точка радиокнопок).

Если вы хотите, чтобы пользователь выбрал несколько вариантов, используйте флажки. Если вы присваиваете этим флажкам одинаковое имя и заканчиваете его [], тогда PHP получит все значения отмеченных флажков в одном массиве.

0 голосов
/ 10 апреля 2011

Можно указать ключ массива в имени вашего поля.

<input type="radio" name="option[radiooption1]" />

Я считаю, что это работает и для числовых ключей, но я не проверял.Подробнее см. http://php.net/manual/en/faq.html.php.

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