Архіви позначок: select

Форми HTML – теґ <select> – список з вибором

Поширте інформацію:

Парний теґ <select> описує список з вибором, що випадає, або розкритий список з вибором.

Формат:

<select name="ім’я" [size="розмір"] [multiple]>
<option [value="значення1"] [selected]>Рядок1<option>
<option [value="значення2"] [selected]>Рядок2<option>
...
<option [value="значенняN"] [selected]>РядокN<option>
</select>

Параметр size визначає, скільки рядків на екрані займатиме список. Якщо size не задано, або задано size=1, буде відображатися список, що займає 1 рядок і розкривається (т. зв. комбобокс), інакше список буде займати size рядків і вертикальну смугу прокрутки в разі, якщо теґів <option> всередині більше, ніж значення size.

Якщо вказаний атрибут multiple, користувачу буде дозволено вибирати кілька рядків, утримуючи клавішу Ctrl (для списку, що розкривається, атрибут multiple не має сенсу).

Кожен рядок списку задається парним теґом <option>. Якщо в ньому заданий атрибут value, то відповідний рядок списку буде ідентифікуватися його значенням, якщо не заданий – рядок буде ідентифікуватися текстом між теґами <option> та </option> (тоді вважається, що значенням value є цей текст).

Текст між теґами <option> та </option> буде відображатися в браузері.

Якщо заданий атрибут selected, то відповідний рядок автоматично буде вибраним після завантаження форми.

Замикаючі теґи </option> можна опускати.

Що ж список з вибором передає сценарію на боці сервера при надсилання форми?

Зі списком, що випадає все зрозуміло: передається пара ім’я=значення,

ім’я задається атрибутом name теґа <select>, значення – це значення, визначене тегом <option> рядка, який вибрав користувач (значення атрибута value або вміст рядка теґами <option>).

А як же, коли список надає можливість вибору кількох рядків і користувач скористався цією можливістю?

Наприклад, маємо список

<select name="Sel" multiple>
<option>First
<option>Second
<option>Third
</select>

і користувач вибрав рядки First і Third.
Очевидно, серверному сценарію буде передано рядок:

Sel=First&Sel=Third

Виходить, при розборі параметрів інтерпретатором PHP змінній $_REQUEST[‘Sel’] буде присвоєно значення ‘First’, а тоді – значення ‘Third’ і значення ‘First’ буде втрачено?

Для вирішення даної проблеми передбачена можливість давати полям форми імена у вигляді масиву з “індексами”.

<select name="Sel[]" multiple>
<option>First
<option>Second
<option>Third
</select>

Тоді сценарію передасться рядок

Sel[]=First&Sel[]=Third

і інтерпретатор при його розборі створить масив з автозаповненням
$_REQUEST['Sel'] = array(0=>'First', 1=>'Third')

Отже, будуть збережені всі вибрані користувачем дані.

Зауважимо, що функціональність списку, що випадає, можна реалізувати за допомогою теґа <input type=”radio”>, а функціональність списку з можливістю множинного вибору можна реалізувати за допомогою теґа <input type=”checkbox”>.