Les zones de saisie liste sont une structure HTML faite avec 2 éléments dont l'un fournit le nom de la zone et l'autre sa valeur.

Structure d'une liste

Exemple : zone liste

Les listes se construisent avec 2 éléments : l'élément select est le conteneur des lignes de la liste qui sont faites avec des éléments option .
Il doit y avoir une balise d'ouverture <select> et une balise de fermeture </select>.

L'élément select doit avoir un attribut name et la valeur de cet attribut doit être unique parmi toutes les zones composant le formulaire.
L'élément select n'a pas d'attribut value.

Les lignes de la liste sont faites avec des éléments option qui contiennent le texte affiché pour la ligne.
Les éléments option doivent avoir un attribut value.
Quand le formulaire sera envoyé au serveur pour traiement, l'attribut value de l'option sélectionnée sera associé à l'attribut name du select pour contituer un couple nom / valeur.

Si aucune ligne n'apparait comme sélectionnée dans la liste, c'est la première ligne de la liste qui sera choisie comme valeur pour le couple nom / valeur envoyé au serveur.

Une ligne peut être sélectionnée par défaut : il suffit qu'elle ait l'attribut selected .
selected est un attribut booléen qui n'a pas de valeur : sa présence ou son absence dans la balise d'ouverture définit la valeur true (présence) ou false (absence). Le piège est d'écrire :
<option selected="false"...
Comme selected est présent, la valeur sera true et le navigateur ne tiendra pas compte de l'égalité faite dans le code HTML.

Attributs de l'élément select

Attribut possible Utilité
autofocus 1er élément activé dans le formulaire. Attribut booléen.
dirname Direction du texte saisi.
disabled Zone désactivée, non transmise au serveur. Aucune interaction n'est possible avec la zone (pas de focus, pas de copie, etc). Attribut booléen.
form id du formulaire associé si la zone n'est pas un élément form ou concerne un autre formulaire que celui dans lequel elle est imbriquée.
multiple Sélection possible de plusieurs lignes. Attribut booléen.
name Nom de la zone. Tous les boutons d'un même groupe DOIVENT avoir le même.
required Zone obligatoire. Attribut booléen.
size Nombre de lignes visibles directement. Si l'attribut est absent, la valeur est 1.

Attributs de l'élément option

Attribut possible Utilité
disabled Zone désactivée, non transmise au serveur. Aucune interaction n'est possible avec la zone (pas de focus, pas de copie, etc). Attribut booléen.
selected Ligne sélectionnée par défaut dans une liste.
value Valeur initiale de la zone et qui sera transmise au serveur si la ligne est sélectionnée dans la liste.

Déroulante ou défilante ?

liste déroulante

Une liste est dite déroulante si une seule ligne est affichée et que les autres lignes de la liste apparaissent quand on clique sur la fléche à droite.

liste défilante

Une liste est dite défilante si plusieurs lignes sont affichées et qu'une barre de défilement verticale permet de faire apparaitre les autres lignes de la liste.

C'est l'attribut size de l'élément select qui permet de définir le nombre de lignes affichées.
Si l'attribut size est absent ou égal à 1 on obtient une liste déroulante, sinon on obtient une liste défilante.

Si on peut choisir la hauteur de la liste avec l'attribut size, aucun attribut ne permet de définir sa largeur qui est déterminée par la plus longue ligne. Pour uniformiser la largeur des listes entre elles et avec les autres zones de saisie du formulaire, on utilise des règles de style CSS. A part la largeur, les autres éléments d'une liste (lignes, marges interne et externe, soulignement, zone interactive d'affichage/masquage, etc.) sont très difficiles à styler de façon homogènes dans les navigateurs (de pratiquement impossible avec Internet Explorer et Chrome à mieux pour Firefox).

Exemple : liste défilante et liste déroulante

Listes de sélection

Ajouter à mes amis

Complétez le code HTML pour obtenir le résultat ci-contre.

La feuille de style liée à l'exercice (form05.css) fera automatiquement la mise en forme des éléments fieldset et legend

Le formulaire utilise la méthode POST pour envoyer les informations saisies à informatique.php.

Les listes s'appellent respectivement slcEdit et slcPref.

Les lignes de slcEdit affichent : NetBeans, Eclipse, Scite, Notepad ++. La liste n'affiche qu'une ligne et la ligne Eclipse est sélectionnée par défaut. Les valeurs des lignes sont le texte affiché par la ligne.

Les lignes de txtPref affichent : C, C#, C++, CSS, HTML, JavaScript, Java, Perl, PHP, Python, Ruby. La liste affiche 6 lignes et la ligne HTML est sélectionnée par défaut. Les valeurs des lignes sont le texte affiché par la ligne.

Les boutons s'appellent btnReset et btnSubmit.

Code à compléter

Exercice : liste de sélection

Une solution possible

Exercice : ajouter à mes amis

Sélections multiples

L'attribut multiple de l'élément select permet de sélectionner plusieurs lignes dans la liste.
multiple est un attribut booléen qui n'a pas de valeur : sa présence ou son absence dans la balise d'ouverture définit la valeur true (présence) ou false (absence). Le piège est d'écrire :
<select multiple="false"...
Comme multiple est présent, la valeur sera true et le navigateur ne tiendra pas compte de l'égalité faite dans le code HTML.

Avec multiple, la sélection des lignes peut se faire en appuyant sur la touche Ctrl du clavier ou sur la touche Maj.

Si multiple est utilisé, la liste créée doit être obligatoirement une liste défilante, le seul type permettant une saisie multiple effective. Si size n'est pas précisé ou égal à 1, le navigateur créera automatiquement une liste défilante affichant 4 lignes.

Pour que les ligne sélectionnées puissent être traitées correctement sur le serveur par un script PHP, il faut que le nom de l'élément select soit terminé par [] de façon à définir un tableau pour le script de traitement PHP.

Exemple : sélections multiples

Groupement de lignes

On peut regrouper les lignes d'une liste par catégories. C'est particulièrement utile quand les listes ont beaucoup de lignes. On utilise l'élément optgroup comme conteneur des option à regrouper.

Le libellé du regroupement est contenu dans l'attribut label de la balise ouvrante optgroup. Ce libellé constituera une ligne dans la liste, mais cette ligne ne sera pas sélectionnable.

Exemple : groupement de lignes
Exemple : groupement de lignes

Voyages-sncf.com

Voyages-sncf.com

Complétez le code HTML pour obtenir le résultat ci-contre.

La feuille de style liée à l'exercice (form05.css) fera automatiquement la mise en forme des éléments fieldset et legend

Le formulaire utilise la méthode POST pour envoyer les informations saisies à voyages-sncf.php.

Les listes s'appellent respectivement slcDepart, slcArrivee, slcAdulte et slcEnfant. Les listes affichent une seule ligne. Les valeurs des lignes sont le numéro de la ligne (1, 2, 3, etc), sauf pour la liste slcEnfant où la numérotation commence à 0.

liste des points de départ
liste des points d'arrivée

Les boutons s'appellent btnReset et btnSubmit.

Code à compléter

Exercice : Voyages-sncf.com

Une solution possible

Exercice : Voyages-sncf.com