L'objet de formulaire select et l'envoi des données

Pour créer des listes et des menus en HTML, on utilise les balises select et option. Mais comment récupérer l'option choisie par l'utilisateur avec les autres données de formulaire?

Voici la syntaxe de la balise select:

<form method="GET" action="page.html">
  <select name="">
    <option value="" selected></option>
    <option value=""></option>
    <option value=""></option>
    ....
  </select>
</form>

Les formulaires transmettent les données sous la forme nom=valeur ou nom est l'attribut name de l'objet et valeur l'attribut value.
Dans le cas d'une liste d'options, le nom qui est passé avec les données de formulaire est celui de la balise select et la valeur est celle de l'attribut value de l'option choisie.

Par exemple:

<select name="maliste">
  <option value="option1"></option>
  <option value="option2"></option>
</select>

Si on a choisi la deuxième option, avec les données de formulaire sera envoyé ceci:

maliste=option2 

Et si une option à l'attribut selected et que l'utilisateur n'a fait aucun choix, c'est la valeur de cette option qui sera passée.

L'attribut selected détermine un choix par défaut

Par défaut, c'est la première option qui est sélectionnée si l'utilisateur ne fait aucun choix.
On peut changer l'option sélectionnée par défaut en lui associant l'attribut selected.
Exemple:

  <select name="couleur">
    <option value="orange"></option>
    <option value="bleu" selected></option>
    <option value="rouge"></option>
    ....
  </select>

Dans l'exemple, le menu affiche la couleur bleue par défaut et c'est cette option qui sera envoyées avec les données de formulaire, si l'utilisateur ne change pas le choix.

On écrit quelque fois aussi l'attribut selected:

    <option value="bleu" selected="selected"></option>

Cela ne semble rien apporter de plus, tout au moins avec les navigateurs modernes.

L'attribut multiple permet des sélectionner plusieurs options à la fois

On peut sélectionner plusieurs options à la fois en combinant la touche CTRL avec la souris, si cet attribut est ajouté.

<select name="couleur" multiple>
    <option value="orange"></option>
    <option value="bleu" selected></option>
    <option value="rouge"></option>
    ....
</select>

Dans ce cas, le nom de l'objet select est passé parmi les données de formulaire avec successivement la valeur de chaque option cliquée.
Ainsi si on selectionne à la fois la couleur bleue et la couleur rouge, on aura en paramètres dans l'URL:

?couleur=bleu&couleur=rouge 

L'attribut size définit le nombre de lignes à afficher

Il définit le nombre d'options affichées à la fois. Par défaut une seule ligne sera affichée.

Dans la démonstration en bas de page, on voit que l'attribut size="4" affiche quatre lignes, donc quatre options.

L'attribut label contient l'option affichée en forme courte

Une option a une valeur assignée à l'attribut value, et un texte correspondant à afficher qui est soit inclut dans la balise, ou assigné à l'attribut label.

Dans la forme courte, l'attribut label spécifie le texte à afficher. Par exemple cette option en forme longue:

  <option value="orange">Orange</option>

Peut être écrite en forme courte:

  <option value="orange" label="Orange" />

Si un attribut label est ajouté alors que la balise à la forme longue avec un contenu inclus, c'est la valeur de label qui est affichée et non le contenu inclus.

Mais dans tous les cas c'est ce qui est assigné à value qui est envoyé avec les données de formulaire.

La balise optgroup subdivise les options

Il permet de créer une hiérarchie de menus en regroupant les options d'un même sous-menu.

<select name="couleur" multiple>
  <optgroup label="Couleur">
    <option value="orange">Orange</option>
    <option value="bleu" selected>Bleu</option>
    <option value="rouge">Rouge</option>
  </optgroup>
  <optgroup label="Taille">
   <option value="un">Un</un>
 </optgroup>
</select> 

Cela affichera ceci dans la boite de sélection:

Couleur
   Orange
   Bleu
   Rouge
Taille
   Un 

Connaître l'option choisie par l'utilisateur grâce à JavaScript

Pour utiliser select en JavaScript, et savoir quelle option l'utilisateur a choisie, on utilise l'attribut selectedIndex (défini dans DOM).
Si la balise select a pour nom "couleur", l'instruction suivante affiche le numéro de l'option choisie, en partant de zéro:

document.forms[0].couleur.selectedIndex;

Et pour accéder aux valeurs, avec le tableau options:

var object = document.forms[0].couleur;
var index = object.selectedIndex;
var value =  object.options[index].value;
var content = object.options[index].text;

On peut aussi choisir une option à partir de code JavaScript:

document.forms[0].couleur.selectedIndex = 3; 

La gestion dynamique des listes en JavaScript est développée dans l'article Select dynamique.

Démonstration de la balise select avec une liste de fruits

Comment on passe le choix fait par l'utilisateur dans une liste parmi les données de formulaire envoyées à un script ou une autre page.

Choisir une valeur dans la liste et cliquer sur Envoyer pour passer le formulaire à la page, qui sera rechargée.
Cliquer sur JavaScript pour afficher le numéro de l'option sélectionnée.

Le code JavaScript:

function receive()
{
var parameters = location.search.substring(1).split("&");
var temp = parameters[0].split("=");
varname = unescape(temp[0]);
if(varname == "") return;
value = unescape(temp[1]);
alert(varname + "=" + value);
}
window.onload=receive;

Le code HTML avec la méthode GET pour avoir les données de formulaire dans l'URL:

<form name="form1" method="get" action="select.php">
<select name="couleur" id="couleur" multiple size="4">
<option>orange</option>
<option selected>bleu</option>
<option>vert</option>
<option>rouge</option>
</select>
<input type="submit" value="Envoyer">
<input type="button" value="Javascript" onClick="show()">
</form>

Voir aussi

Forum

Positionnement de select sur une image

22-03-2009 09:43:29

meumeul

Bonjour, je suis un débutant en conception de sites internet et j'aimerai faire quelque chose, pourriez-vous me venir en aide svp ! Je cherche à positionner une cellule à un endroit précis et sur une image mais avec mon idée que je vous cite ci-dessous, la cellule ne bouge pas mais du texte oui ! savez vous comment je peux faire svp ? Merci
<div style="position:absolute;top:360px; width:600px; height:400px; z-index:2; "><SELECT NAME=Continent>
<OPTION>Europe
<OPTION>Asie
<OPTION>Afrique
<OPTION>Amérique
<OPTION>Océanie
</SELECT>
</div>
22-03-2009 20:27:34

webmaster

Bonjour. Le tutoriel sur le positionnement d'un texte sur une image peut-il aider?
27-03-2009 23:52:06

meumeul

Bonjour, Désoler du laps de temps pour la réponse mais je suis commercial donc pas très souvent chez moi ! Et sinon bein le tuto peut m'aider pour du texte oui mais je n'arrive pas trop à l'adapter pour une cellule, une cellule du type avec ascenseur comme pour dans les formulaires !
28-03-2009 19:17:25

webmaster

Le code dont j'ai donné le lien place dans un div conteneur, un div contenant une image et un autre div contenant dans l'exemple un texte, mais ce peut être un select aussi bien. Pour la surimposisiton, le div du select à un z-index de 2 comme c'est bien le cas dans le code de la question, et celui de l'image de 1. Le point important est que le div conteneur ait la propriété:
position:relative
alors que le div de l'image et celui du select ont la propriété:
position:absolute
Cela doit fonctionner avec tout autre élément HTML
28-03-2009 19:57:22

meumeul

Ah oui je viens de reussir ! merci beaucoup de ton aide, en relisant bien ton message j'ai réussi à faire fonctionner ;) Merci beaucoup pour ton aide très très precieuse
© 2010-2013 Xul.fr