Несколько простых блоков выбора для замены поля множественного выбора в HTML - PullRequest
1 голос
/ 27 ноября 2009

Я хотел бы заменить поле множественного выбора, например:

<select multiple="multiple" name="options">  
<option value="option1">option1</option>  
<option value="option2">option2</option>  
...  
</select>

с произвольным числом простых полей выбора:

<select name="options1">  
<option value="option1">option1</option>  
<option value="option2">option2</option>  
...  
</select>  

<select name="options2">  
<option value="option1">option1</option>  
<option value="option2">option2</option>  
...  
</select>  

Есть ли способ отправить и получить через POST массив блоков выбора, или я должен пытаться получить доступ к каждому блоку выбора с именем options (number), пока он не даст сбой? Кажется немного грязным.

Я должен быть в состоянии отправить действие «удалить это поле выбора» или «создать новое поле выбора», поэтому мне нужен какой-то способ различать поля выбора.

1 Ответ

1 голос
/ 27 ноября 2009

Просто присвойте выделенным элементам одинаковое имя.

HTML-формы не имеют понятия «массив». Каждая библиотека обработки форм, которая обрабатывает массивы входных данных, генерирует их из имени, имеющего несколько значений:

foo=bar&foo=baz&aDifferentField=fizzbuzz

Это то, что сгенерирует множественный выбор (с именем foo) с двумя выбранными значениями (когда в форме тоже есть 'aDifferentField')

Иногда возникают оговорки.

CGI.pm в Perl требует, чтобы данные были в контексте списка:

my @foos = $cgi->param('foo');

PHP требует, чтобы имя заканчивалось символами '[]'

name="foo[]"
foo[]=bar&foo[]=baz&aDifferentField=fizzbuzz

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

Что касается удаления:

<label for="foo5">Group 5</label>
<select name="foo" id="foo5">
    <option value="delete_foo5">Delete this group</option>
    <option value="1">1</option>
    <option value="2">2</option>
</select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...