Formulaires 

Sommaire

  1. L'élément FORM
  2. Contrôles
    1. L'élément INPUT
    2. L'élément BUTTON
    3. Les éléments SELECT et OPTION
    4. Les éléments TEXTAREA
    5. L'élément LABEL
    6. Les éléments FIELDSET et LEGEND
  3. Donner le "focus" à un élément
    1. Navigation tabulée
    2. Touches d'accessibilité
  4. Eléments désactivés ou en lecture seule
    1. Eléments désactivés
    2. Eléments en lecture seule
  5. Soumission de formulaires
    1. Les valeurs d'éléments soumises

Un formulaire HTML est une section d'un document dans laquelle on trouvera du contenu normal, des balises, et des éléments spéciaux appelés contrôles. Les contrôles répondent à des actions utilisateur et acceptent des donnés. Les utilisateurs "complètent" les formulaires en saisissant du texte, en sélectionnat des choix de menus, etc., puis soumettent le formulaire pour traitement. Les formulaires soumis peuvent à ce moment être transmis par courrier électronique ou directement alimenter un programme de traitement de données.

Les contrôles pourront être des cases à cocher, des boutons radio, des labels, des menus, etc. Un nom peut être donné à chaque instance de contrôle. Lorsque le formulaire est soumis, certains contrôles (suivant leur état) "émettront", associé à leur nom, une valeur. La nature de la valeur soumise dépend du contrôle (ex., la valeur d'un champ de texte est le texte inscrit).

Note : Cette spécification inclue une information détaillée sur les formaulaires dans les sections traitant de l'affichage des formulaires. Des chapitres supplémentaires sur la façon de coder le contenu des éléments de formulaire seront ajoutés à ce document provisoire dans le futur.

The FORM element 

<!ELEMENT FORM - - %block -(FORM)>
<!ATTLIST FORM
  %attrs;                          -- %coreattrs, %i18n, %events --
  action      %URL       #REQUIRED -- Gestionnaire côté serveur --
  method      (GET|POST) GET       -- Requête HTTP utilisée pour la soumision --
  enctype     %ContentType; "application/x-www-form-urlencoded"
  onsubmit    %Script    #IMPLIED  -- Juste avant soumission --
  onreset     %Script    #IMPLIED  -- Juste avant réinitialisation --
  target      CDATA      #IMPLIED  -- Où rendre les résultats --
  accept-charset CDATA   #IMPLIED  -- Jeux de caractères supportés --
  >

Balise de début : requise, Balise de fin : requise

Définition des attributs

action = url
Cet attribut spécifie un programme destiné à traiter les données soumises par le formulaire. Il peut s'agir d'une URL HTTP (pour soumettre le formulaire à un programme) ou une URL MAILTO (pour envoyer le formulaire par courrier).
method = get|post
Cet attribut spécifie quel type de requête HTTP sera utilisée pour soumettre les paires nom/valeur au gestionnaire de formulaire. Les valeurs possibles sont :
  • post : Le formulaire est soumis par la méthode HTTP POST. La méthode POST inclue les paires nom/valeur dans le corps du formulaire et non dans l'URL spécifiée par l'attribut action.
  • get : Obsolète. Le formulaire est soumis par la méthode HTTP GET. La méthode GET concatène les paires nom/valeur URL-encodées à l'URL spécifiée par action et requiert cette nouvelle URL au serveur. Il s'agit du mode par défaut pour des raisons de compatibilité ascendante. Cette valeur est rendue obsolète pour les besoins d'internationalisation.
enctype = cdata
Cet attribut spécifie le type MIME (Cf. [MIMETYPES]) utilisé pour soumettre le formulaire au serveur (lorsque la valeur de l'attribut method vaut "post"). La valeur par défaut de cet attribut est "application/x-www-form-urlencoded". La valeur "multipart/form-data" devra être utilisée lorsque le formulaire inclue le téléchargement de fichiers associés.
accept-charset = cdata
Cet attribut spécifie la liste des jeux de caractères des entrées de données que le serveur traitant le formulaire est sensé accepter. Cette valeur est une liste de noms de jeux de caractères tels que définis dans la [RFC2045], séparés par des espaces ou des virgules. Le serveur doit interpréter cette liste comme une liste codée en "ou exclusif", c-à-d, le serveur devra accepter de reconnaître qu'une seule entité caractère par caractère reçu.

La valeur par défaur de cet attribut est la chaîne réservée "UNKNOWN". Les agents utilisateur compendront cette valeur comme "le jeu de caractère utilisé dans le document HTML qui contenait cet élément FORM".

accept = cdata
Cet attribut spécifie une liste de types MIME séparés par une virgule, qu'un serveur traitant ce formulaire est sensé comprendre correctement. Les agents utilisateurs utiliseront cette information pour filtrer des types de fichiers non souhaîtés lorsque l'utilisateur désigne des fichiers associés à joindre au formulaire (cf. avec l'élément INPUT lorsque l'attribut type="file").

Attributs définis par ailleurs

L'élément FORM fait office de container pour des contrôles. Il spécifie :

Un formulaire peut contenir du texte et des balises (paragraphes, listes, etc.) ainsi que les contrôles détaillés ci-après.

La portée de l'attribut name associé à chacun ds contrôles situé à l'intérieur d'un élément FORM est limitée à cet élément FORM.

L'exemple suivant spécifie que le formulaire une fois soumis sera traité par le programme "ajoututilisateur". Le formulaire sera envoyé au programme par la méthode HTTP POST.

<FORM action="http://somesite.com/prog/ajoututilisateur" method="post">
 ...contenu de formulaire...
 </FORM>

L'exemple suivant montre comment envoyer le contenu d'un formulaire par courrier electronique.

 <FORM action="mailto:Kligor.T@gee.whiz.com" method="post">
 ...contenu de formulaire...
 </FORM>

Contrôles 

Les éléments contrôles décrits ci-après apparaissent généralement dans une declaration FORM. Cependant, ces éléments peuvent parfois être implantés en dehors d'un élément FORM lorsqu'ils servent à construire une interface utilisateur. Cet aspect est traité plus avant dans cette spécification, dans la section concernant les événements intrinsèques.

Labels de contrôles
Certains contrôles de formulaires sont automatiquement associés à des labels (boutons d'action créés par un élément INPUT ou BUTTON) tandis que d'autres n'en ont pas (champs de saisie créés par un élément INPUT ou TEXTAREA, cases à cocher et boutons radio créés par des éléments INPUT, ou encore les menus créés par une déclaration SELECT).

Pour renseigner les labels implicitement associés à ces contrôles, les agents utilisateur pourront utiliser la valeur de l'attribut value.

Pour les éléments qui ne sont pas associés à des labels, les auteurs ajouteront explicitement les labels avant ou après la définition du contrôle. Ceci est illustré par l'exemple ci-dessous.

L'élément INPUT 

<!ENTITY % InputType
  "(TEXT | PASSWORD | CHECKBOX |
    RADIO | SUBMIT | RESET |
    FILE | HIDDEN | IMAGE | BUTTON)"
   >

<!-- HSPACE and VSPACE missing due to lack of widespread support -->
<!ELEMENT INPUT - O EMPTY>
<!ATTLIST INPUT
  %attrs;                          -- %coreattrs, %i18n, %events --
  type      %InputType   TEXT      -- quel type de "composant graphique" est nécessaire --
  name        CDATA      #IMPLIED  -- requis pour tous sauf submit & reset --
  value       CDATA      #IMPLIED  -- requis pour les boutons radio et cases a cocher --
  checked   (checked)    #IMPLIED  -- boutons radio et cases a cocher --
  disabled  (disabled)   #IMPLIED  -- le contrôle n'est pas activable --
  readonly  (readonly)   #IMPLIED  --  texte et mot de passe --
  size        CDATA      #IMPLIED  -- spécifique à chaque type de champ --
  maxlength   NUMBER     #IMPLIED  -- nombre de caractères maximum pour les champs de texte --
  src         %URL       #IMPLIED  -- pour tout champ avec images --
  alt         CDATA      #IMPLIED  -- description pour les navigateurs alphanumériques exclusifs --
  usemap      %URL       #IMPLIED  -- utilisation d'une Imagemap cliente --
  align       %IAlign    #IMPLIED  -- alignement horizontal ou vertical --
  tabindex    NUMBER     #IMPLIED  -- ordre de tabulation --
  onfocus     %Script    #IMPLIED  -- l'élément vient d'avoir le focus --
  onblur      %Script    #IMPLIED  -- l'élément vient de perdre le focus --
  onselect    %Script    #IMPLIED  -- du texte a été sélectionné --
  onchange    %Script    #IMPLIED  -- la valeur de l'élément vient d'être modifiée --
  accept      CDATA      #IMPLIED  -- liste des types MIME acceptés pour téléchargement --
  >

Balise de début : requise, Balise de fin : interdite

Définition des attributs

type = text|password|checkbox|radio|submit|reset|file|hidden|image|button
Cet attribut spécifie le type de contrôle de saisie de données à créer. Les types de champs de saisie sont décrits ci-dessous. Cet attribut vaut "text" par défaut.
name = cdata
Cet attribut permet d'assigner un nom au contrôle. Ce nom sera appairé avec la valeur courante du contrôle, le couple ainsi constitué étant alors transmis si le formulaire est soumis.
value = cdata
Cet attribut spécifie la valeur initiale du contrôle. Il est optionnel sauf lorsque le type de contrôle est "radio", auquel cas il devient obligatoire.
size = cdata
Cet attribut indique à l'agent utilisateur la largeur initiale du contrôle. La largeur est donnée en pixels, saufs pour les champs de saisie de texte et de mot de passe pour lesquels elle est exprimée en nombre de caractères (entier).
maxlength = integer
Lorsque le type de champ est "text" ou "password", cet attribut spécifie le nombre maximum de caractères qui peut y être entré. Ce nombre peut être supérieur à la valeur de l'attribut size, auquel cas l'agent utilisateur fournira un mécanisme de défilement à l'intérieur du champ. La valeur par défaut correspond à un nombre illimité de caractères.
checked
Lorsque le type de champ est un bouton "radio", cet attribut booléen spécifie que le bouton radio est sélectionné. Cet attribut devra être ignoré pour tous les autres types de contrôles.
src = url
Lorsque le type de champ est "image", cet attribut spécifie la localisation de l'image utilisée pour "décorer" graphiquement le bouton de soumission.

Attributs définis par ailleurs

La nature d'un contrôle défini par un élément INPUT dépend de la valeur de son attribut type.

Types de champs de saisie 

L'attribut type de l'élément INPUT détermine quel contrôle doit être créé.

text
Ce type crée un champ de texte monoligne. La valeur émise lors de la soumission du formulaire est le texte entré.
password
Comme le type "text", mais le texte entré est visualisé à l'écran de sorte que les caractères ne puissent être reconnus (par exemple une série d'étoiles). Ce contrôel est utilisé pour l'entrée de données sensibles telles que des mots de passe. La valeur émise lors de la soumission du formulaire est le texte tapé (et non pas le texte affiché (!)).
checkbox
Une case à cocher est une sorte de commutateur bipolaire. Lorsqu'elle est cochée, la case est dite "active". Lorsqu'elle est vide, la case est "inactive". La valeur de la case à cocher n'est émise que si cette dernière est active.

Plusieurs cases à cocher du même formulaire pourront partager le même nom. Au moment de la soumission, toute case à cocher "activée" y compris celles de nom semblable émet une paire nom/valeur dans laquelle le nom sera identique. Ceci permettra aux utilisateurs de choisir des valeurs multiples pour une propriété unique.

radio
Un bouton radio est aussi un commutateur bipolaire. Lorsqu'il est marqué, le bouton radio est dit "active". Lorsqu'il est vide, il est réputé "inactive". La valeur du bouton radio n'est émise que si ce dernier est actif.

Plusieurs boutons radio du même formulaire pourront partager le même nom. Cependant, seul l'un d'entre eux pourra être actif à la fois. Lorsque l'un des bouton radio est marqué, tous les autres portant le même nom sont automatiquement déselectionnés. Pour cet ensemble de boutons radio, il ne peut donc être émis qu'une seule paire nom/valeur.

submit
Crée un bouton de soumission. Lorsque l'utilisateur clique sur ce bouton, le contenu du formaulaire est soumis au programme spécifié par la localisation définie par l'attribut action de l'élément FORM englobant.

Un formulaire peut contenir plusieurs boutons de soumission. Cependant, seule la paire nom/valeur du bouton de soumission actionné sera envoyée dans le formulaire.

image
Crée un bouton de soumission graphique. La valeur de l'attribut src spécifie l'URL de l'image qui servira de représentation graphique du bouton. Certains utilisateurs ne pourront visualiser cette image. Nous recommandons fortement d'adjoindre la définition d'un attribut alt valant pour alternative textuelle de l'image.

Lorsqu'un système de pointage est utilisé pour cliquer sur l'image, le formulaire est soumis et l'endroit physique du clic est transmis au serveur. La valeur x est mesurée en pixels à partir du bord gauche de l'image, et le valeur y est une mesure en pixels à partir du bord supérieur de l'image. Les données soumises incluent nom.x=valeur-x et nom.y=valeur-y"nom" est la valeur de l'attribut name, et valeur-x et valeur-y les coordonnées x et y respectives.

Si le serveur a des réactions différentes suivant l'endroit où l'on clique sur l'image, alors les utilisateurs d'agents non graphiques seront désavantagés. Pour cette raison, nous vous demandons d'examiner les approches alternatives suivantes :

Une extension future possible serait d'ajouter l'attribut usemap à l'élément INPUT pour rétablir un fonctionnement de type Imagemap cliente lorsque "type=image". L'élément AREA correspondant à l'endroit où le bouton aurait été cliqué contribuerait alors à la sélection de la valeur à envoyer au serveur. Afin d'éviter de reprendre les scripts serveurs, il serait approprié d'étendre l'élément AREA de façon à ce qu'il intégre les valeurs en x et en y, lesquelles seraient utilisées dans le contexte de l'élément INPUT.

reset
Crée un bouton de réinitialisation. Lorsque ce bouton est activé par l'utilisateur, les valeurs de tous les contrôles du formulaire sont remises à leur valeur initiale, telle que mentionnée dans l'attribut value. Le couple nom/valeur d'un bouton de réinitialisation n'est jamais envoyé lors de la soumission d'un formulaire.
button
Crée un bouton poussoir qui n'a aucun comportement prédéfini. Le comportement de ce bouton sera défini par ailleurs, en lui associant des scripts clients déclenchés lorsque certains événements affectant ce bouton surviennent (par exemple lorsqu'on clique dessus). La valeur de l'attribut value est utilisée comme libellé du bouton.

Par exemple, la déclaration suivante fait exécuter la fonction appelée verify lorsque l'utilisateur clique sur le bouton. Le script doit être définie dans un élément SCRIPT.

<INPUT type="button" value="Click Me" onclick="verify()">

Consultez la section traitant des événements intrinsèques pour plus de détails sur les scripts et les événements.

hidden
Crée un élément qui ne doit pas être représenté par l'agent utilisateur. Cependant, le couple nom/valeur de cet élément sera joint aux données envoyées lors de la soumission du formaulaire.

Ce type de contrôle sera en général utilisé pour enregistrer des données d'échanges client/serveur qui seraient autrement perdues du fait de la nature volatile des processus HTTP.

Les valeurs des contrôles INPUT de type hidden sont envoyées lors de la soumission du formulaire. Ceci resterait vrai pour tout contrôle qui ne pourrait être affiché pour des raisons de paramétrage de style. Le contrôle suivant, bien qu'invisible aux yeux de l'utilisateur, émettra sa valeur vers le serveur lorsque le formulaire sera soumis.

<INPUT type="password" style="display:none"  
          name="mot-de-passe-invisible"
          value="mon-mot-de-passe">
file
Demande à l'utilisateur de désigner un fichier. Lorsque le formulaire est soumis, le contenu de ce fichier sera transmis au serveur comme une valeur de n'importe quel autre contrôle.

Les agents utilisateurs encapsuleront de multiples fichiers dans un document de type MIME "multipart" (voir la [RFC2045]). Ce mécanisme encapsule chaque fichier sous forme d'un corps d'entité d'un document HTTP multiple. Chaque corps d'entité peut être précédé d'une en-tête "Content-Type:" propre, et si nécessaire d'un champ d'en-tête "charset" qui spécifie le jeu de caractère pour les type MIME correspondant aux fichiers textuels.

L'extrait de HTML suivant définit un formulaire simple qui permet à un utilisateur de d'entrer son nom, son prénom, son adresse email, et son sexe. Lorsque le bouton de soummission est activé, le formulaire est envoyé au programme spécifié par l'attribut action.

 <FORM action="http://somesite.com/prog/adduser" method="post">
    <P>
    Nom : <INPUT type="text" name="nom"><BR>
    Prénom : <INPUT type="text" name="prenom"><BR>
    email: <INPUT type="text" name="email"><BR>
    <INPUT type="radio" name="sexe" value="Homme"> Homme<BR>
    <INPUT type="radio" name="sexe" value="Femme"> Femme<BR>
    <INPUT type="submit" value="Send"> <INPUT type="reset">
 </FORM>

Ce formulaire serait affiché comme suit :

 

Nom :
Prénom :
email:
Homme
Femme

Dans la section traitant des éléments LABEL, nous discuterons de la façon d'écrire des labels tels que "Nom".

L'exemple qui suit montre comment le contenu d'un fichier spécifié par l'utilisateur peut être soumis par formulaire. Cet exemple est basé sur un exemple écrit dans la [RFC1867].

Dans cet exemple, on demande à l'utilisateur un nom et une liste de noms de fichiers dont le contenu doit être envoyé au serveur. En spécifiant l'attribut enctype du "multipart/form-data", chaque contenu de fichier sera stocké dans une sous-entité séparée d'un document multipart.

<FORM action="http://server.dom/cgi/handle"
    enctype="multipart/form-data"
    method="post">
 Quel est votre nom ? <INPUT type="text" name="nom-de-l'emetteur">
 Quels fichiers envoyez vous ? <INPUT type="file" name="noms-des-fichiers">
</FORM>

Consultez la [RFC1867] pour plus d'informations sur la soumission de fichiers.

L'élément ISINDEX 

ISINDEX est obsolète. Les utilisateurs devraient plutôt utiliser l'élément INPUT.

<!ELEMENT ISINDEX - O EMPTY>
<!ATTLIST ISINDEX
  %coreattrs;                      -- id, class, style, title --
  %i18n;                           -- lang, dir --
  prompt      CDATA      #IMPLIED  -- message -->

Balise de début : requise, Balise de fin : interdite

Définition des attributs

prompt = cdata
Obsolète. Cet attribut spécifie une étiquette pour le champ d'entrée.

Attributs définis par ailleurs

L'élément ISINDEX est un champ de saisie de texte graphiquement séparé du contexte (permettant la saisie d'un nombre quelconque de caractères). L'agent utilisateur pourra se baser sur la valeur de l'attribut prompt comme label du champ.

EXEMPLE OBSOLETE :
La déclaration de ISINDEX suivante :

<ISINDEX prompt="Entrez votre critère de recherche : ">

est équivalente à la déclaration INPUT suivante :

<FORM action="..." method="post">
Enter your search phrase: <INPUT type="text">
</FORM>

NdA. En fait, après vérification sur plusieurs agents utilisateurs, les deux formes ne produisent pas le même résultat. Il faut encadrer la deuxième par des éléments <HR> pour que les représentations soient identiques

Sémantique de ISINDEX. Actuellement, la sémantique dans les champs ISINDEX n'est clairement définie que lorsque l'URL de base du document courant est une URL HTTP. En practique, l'entrée est limitée au jeu Latin-1 du fait qu'il n'existe aucun mécanisme dans l'URL qui permette de spécifier un jeu de caractères différent.

L'élément BUTTON 

<!ELEMENT BUTTON - -
     (%inline | %blocklevel)* -(A | %formctrl | FORM | ISINDEX | FIELDSET)>
<!ATTLIST BUTTON
  %attrs;                          -- %coreattrs, %i18n, %events --
  name        CDATA      #IMPLIED  -- dansle contexte de scripts/formulaires comme bouton de soumission --
  value       CDATA      #IMPLIED  -- passé au serveur sur soumission --
  type    (submit|reset) #IMPLIED  -- rôle du bouton --
  disabled   (disabled)  #IMPLIED  -- contrôle désactivé dans ce contexte --
  tabindex    NUMBER     #IMPLIED  -- ordre de tabulation --
  onfocus     %Script    #IMPLIED  -- l'élément vient d'avoir le "focus" --
  onblur      %Script    #IMPLIED  -- l'élément vient de perdre le "focus" --
  >

Balise de début : requise, Balise de fin : requise

Définition des attributs

name = cdata
Cet attribut affecte un nom à un bouton.
value = cdata
Cet attribut affecte une valeur à un bouton.
type = button|submit|reset
Cet attribut déclare le type du bouton. Lorsque cet attribut n'est pas mentionné, le comportement du bouton reste indéfini. Valeurs possibles :
  • button : Crée un simple bouton destiné à déclencher un script.
  • submit : Crée un bouton dont le rôle sera de provoquer la soumission du formulaire qui le contient. C'est la valeur par défaut.
  • reset: Crée un bouton qui réinitialise le formulaire dans lequel il est contenu.

Attributs définis par ailleurs

Un élément BUTTON de type "submit" est similaire a un élément INPUT du même type. Ces deux "widgets" provoquent la soumuission du formulaire lorsqu'ils sont actionnés, mais l'élément BUTTON offre une plus grande plage de possibilités graphiques.

Un élémentBUTTON de type "submit" et dont le contenu serait une image (ex., un élément IMG) est très proche d'un élément INPUT de type "image". Ils provoquent tous deux la soumission du formulaire, mais leur aspect est différent. Dans ce contexte, un élément INPUT devrait être rendu comme une image "plate", tandis qu'un élément BUTTON sera représenté avec son "chanfrein" (c-à-d., en relief, avec inversion de profondeur lorsque cliqué).

L'exemple suivant étend un exemple précédent en y substituant les éléments INPUT qui créent les boutons de soumission et de réinitialisation par des instances d'éléments BUTTON. Les boutons contiennent des images par leur contenu sous forme d'un élément IMG.

 <FORM action="http://somesite.com/prog/adduser" method="post">
    <P>
    Nom : <INPUT type="text" name="nom"><BR>
    Prénom : <INPUT type="text" name="prenom"><BR>
    email : <INPUT type="text" name="email"><BR>
    <INPUT type="radio" name="sexe" value="Homme"> Homme<BR>
    <INPUT type="radio" name="sexe" value="Femme"> Femme<BR>
    <BUTTON name="submit" value="submit" type="submit">
    Send<IMG src="/icons/wow.gif" alt="wow"></BUTTON>
    <BUTTON name="reset" type="reset">
    Reset<IMG src="/icons/oops.gif" alt="oops"></BUTTON>
 </FORM>

Lorsqu'un BUTTON est utilisé en combinaison avec un élément IMG, il est recommandé d'exploiter l'attribut alt de l'élément IMG comme description textuelle pour les agents non graphiques.

Associer une Imagemap à un élément IMG apparaissant en tant que contenu d'un élément BUTTON est considéré comme illégal.

EXEMPLE ILLEGAL :
Ce qui suit n'est pas une écriture HTML autorisée.

<BUTTON>
<IMG src="foo.gif" usemap="...">
</BUTTON>

Un élément BUTTON de type "reset" est très similaire à un élément INPUT du même type. Ils provoquent tous deux la remise de tous les champs à leurs valeurs initiales, mais l'élément BUTTON offre une plus grande plage de possibilités graphiques.

L'élément BUTTON peut aussi être utilisé en relation aux scripts clients, auquel cas son type doit être "button". Lorsqu'un tel bouton est cliqué, un script client est exécuté. Cet usage de l'élément BUTTON est développé plus en avant dans ce document, dans la section qui concerne les événements intrinsèques.

Les éléments SELECT et OPTION 

<!ELEMENT SELECT - - (OPTION+)>
<!ATTLIST SELECT
  %attrs;                          -- %coreattrs, %i18n, %events --
  name        CDATA      #REQUIRED -- nom de champ --
  size        NUMBER     #IMPLIED  -- nombre de lignes visibles --
  multiple  (multiple)   #IMPLIED  -- sélection par défaut (pour une sélection unique) --
  disabled  (disabled)   #IMPLIED  -- contrôle désactivé dans ce contexte --
  tabindex    NUMBER     #IMPLIED  -- ordre de tabulation --
  onfocus     %Script    #IMPLIED  -- l'élément vient de recevoir le "focus" --
  onblur      %Script    #IMPLIED  -- l'élément vient de perdre le "focus" --
  onselect    %Script    #IMPLIED  -- du texte y a été sélectionné --
  onchange    %Script    #IMPLIED  -- la valeur d'élément vient de changer --
  >

Balise de début : requise, Balise de fin : requise

SELECT Définition des attributs

name = cdata
Cet attribut affecte un nom à l'élément. Ce nom sera appairé avec toute valeur sélectionnée dans la liste, le couple étant alors envoyé au serveur lorsque le formulaire est soumis.
size = integer
Cet attribut spécifie le nombre de lignes de liste qui doivent être affichées par l'agent utilisateur. Le nombre de lignes visibles pourra être plus petit que le nombre de lignes disponibles. Dans ce cas, l'agent utilisateur procurera un mécanisme de défilement qui permettra d'accéder à toutes les options possibles.
multiple
Lorsqu'il est présent, cet attribut booléen autorise une sélection multiple. S'il n'est pas mentionné, l'élément SELECT n'autorise qu'un sélection unique. Traditionnellement, les agents utilisateurs visuels affichent des éléments à sélection multiples comme des listes, et les éléments à sélection unique comme des menus déroulants.

L'élément SELECT crée une liste d'options pouvant être sélectionnées par l'utilisateur. Chaque élément SELECT doit contenir au moins une définition d'option. Chaque option est spécifiée par une instance de l'élément OPTION.

<!ELEMENT OPTION - O (#PCDATA)*>
<!ATTLIST OPTION
  %attrs;                          -- %coreattrs, %i18n, %events --
  selected  (selected)   #IMPLIED
  disabled  (disabled)   #IMPLIED  -- contrôle désactivé dans ce contexte --
  value       CDATA      #IMPLIED  -- contenu de l'élément par défaut --
  >

Balise de début : requise, Balise de fin : optionnelle

OPTION Définition des attributs

selected
Lorsqu'il est défini, cet attribut booléen spécifie que cette option est sélectionnée (initialement, ou à postériori par l'utilisateur).
value = cdata
Cet attribut spécifie la valeur à envoyer pour cette option si celle-ci est sélectionnée au moment où le formulaire est soumis. La valeur est appairée avec l'attribut name affecté à l'élément SELECT. Si cet attribut n'est pas défini, la valeur soumise par défaut est le contenu de l'élément OPTION.

Attributs définis par ailleurs

Les agents utilisateurs se baseront sur le contenu de l'élément OPTION pour afficher le libellé de l'option dans la liste.

Dans l'exemple qui suit, nous créons un menu qui permet à l'utilisateur de choisir l'un des composants logiciels à installer parmi sept. Le premier et le second composants sont sélectionnés par défaut (initialement) mais pourront être déselectionnés par l'utilisateur. Les autres composants ne sont pas sélectionnés initialement. L'attribut size indique dans ce cas que seuls quatre lignes seront visibles à la fois bien que l'utilisateur puisse toujours effectuer son choix parmi les sept options disponibles. Il sera possible d'atteindre les autres options par défilement de la liste.

L'élément SELECT est suivi par deux boutons, un de soumission et l'autre de réinitialisation.

<FORM action="http://somesite.com/prog/selection-composants" method="post">
   <SELECT multiple size="4" name="selection-composants">
      <OPTION selected value="Composant_1_a">Composant_1</OPTION>
      <OPTION selected value="Composant_1_b">Composant_2</OPTION>
      <OPTION>Composant_3</OPTION>
      <OPTION>Composant_4</OPTION>
      <OPTION>Composant_5</OPTION>
      <OPTION>Composant_6</OPTION>
      <OPTION>Composant_7</OPTION>
   </SELECT>
   <INPUT type="submit" value="Send"><INPUT type="reset">
</FORM>

Lors de la soumission du formulaire, chaque option sélectionnée sera appairée au nom "selection-composant" et envoyé au serveur. La valeur soumise pour chaque OPTION sera son contenu, sauf si contrecarré par un attribut value (ici, pour les deux premiers composants).

L'élément TEXTAREA 

<!ELEMENT TEXTAREA - - (#PCDATA)*>
<!ATTLIST TEXTAREA
  %attrs;                          -- %coreattrs, %i18n, %events --
  name        CDATA      #REQUIRED
  rows        NUMBER     #REQUIRED
  cols        NUMBER     #REQUIRED
  disabled  (disabled)   #IMPLIED  -- contrôle désactivé dans ce contexte --
  readonly  (readonly)   #IMPLIED
  tabindex    NUMBER     #IMPLIED  -- ordre de tabulation --
  onfocus     %Script    #IMPLIED  -- l'élément vient de recevoir le "focus" --
  onblur      %Script    #IMPLIED  -- l'élément vient de perdre le "focus" --
  onselect    %Script    #IMPLIED  -- du texte vient d'y être sélectionné --
  onchange    %Script    #IMPLIED  -- la valeur de l'élément vient de changer --
  >

Balise de début : requise, Balise de fin : requise

Définition des attributs

name = cdata
Cet attribut affecte un nom à l'élément. Ce nom sera appairé avec le contenu de l'élément lors de la soumission du formulaire.
rows = integer
Spécifie le nombre de lignes visibles. Les utilisateurs pourront saisir plus de lignes qu'indiqué par cet attribut, et de ce fait, les agents utilisateurs fourniront un mécanisme de défilement du tampon de texte si son contenu déborde de la zone visible.
cols = integer
Spécifie la largeur visible comptée en largeur de caractère moyenne. Les utilisateurs pourront saisir des lignes plus longues que ce qui pourra être vu dans cette largeur, les agents utilisateurs fourniront un mécanisme de défilement du tampon de texte si son contenu déborde de la zone visible. Les agents utilisateurs pourront aussi "casser" les lignes de texte trop longues, de façon à les maintenir visibles dans leur globalité, sans avoir recours au défilement.

Attributs définis par ailleurs

L'élément TEXTAREA crée un zone de saisie de texte multilignes (par opposition auchamp de texte INPUT d'une seule ligne). Le contenu de cet élément fournit le texte initial qui est présenté dans la zone de saisie.

L'exemple qui suit crée un contrôle TEXTAREA de 20 lignes sur 80 colonnes qui contient initialement deux lignes de texte. L'élément TEXTAREA est suivi de deux boutons, un de soumission et un de réinitialisation.

<FORM action="http://somesite.com/prog/text-read" method="post">
   <TEXTAREA rows="20" cols="80">
   Première ligne du texte initial.
   Deuxième ligne du texte initial.
   </TEXTAREA>
   <INPUT type="submit" value="Send"><INPUT type="reset">
</FORM>

En marquant l'attribut readonly , les auteurs pourront inscrire un texte fixe dans un élément TEXTAREA. Ceci diffère du texte habituel du document en ce sens que la valeur du TEXTAREA sera soumise avec le formulaire.

Il est recommandé que les agents utilisateur terminent canoniquement les lignes de texte par une séquence CR puis LF (13, 10 en ASCII décimal) lorsque le contenu de cette zone est soumise. Le jeu de caractère des données soumises est l'ISO Latin-1, sauf si le serveur a indiqué précédemment qu'il était en mesure de supporter d'autre jeux de caractères.

L'élément LABEL 

<!ELEMENT LABEL - - (%inline)* -(LABEL) -- label texte -->
<!ATTLIST LABEL
  %attrs;                          -- %coreattrs, %i18n, %events --
  for         IDREF      #IMPLIED  -- valeur d'ID d'un champ --
  disabled    (disabled) #IMPLIED  -- contrôle désactivé dans ce contexte --
  accesskey   CDATA      #IMPLIED  -- touche d'accessibilité --
  onfocus     %Script    #IMPLIED  -- l'élément vient de recevoir le "focus" --
  onblur      %Script    #IMPLIED  -- l'élément vient de perdre le focus --
  >

Balise de début : requise, Balise de fin : requise

Définition des attributs

for = control-name
Cet attribut associe explicitement le label en cours de déclaration à un autre contrôle. La valeur de cet attribut doit être la valeur de l'attribut id d'un autre contrôle dans le même document. En absence de cet attribut, le label est associé à son propre contenu.

Attributs définis par ailleurs

L'élément LABEL peut être utilisé pour attacher une information à un autre contrôle (à l'exception des éléments LABEL eux-mêmes). Les labels pourront être affichés par les agents utilisateurs d'une multitude de façons (ex., visuellement, auditivement par des synthétiseurs vocaux, etc.)

Lorsqu'un élément LABEL reçoit le "focus", il le passe directement au contrôle qui lui est associé. Vois la section ci-dessous contenant des exemples d'usage de touches d'accessibilité.

Pour associer explicitement un label à un autre contrôle, définissez l'attribut for du LABEL.

L'exemple suivant crée un tableau utilisé pour aligner deux champs INPUT et leurs labels associés respectifs. Chaque label est associé explicitement à l'un des éléments INPUT.

<FORM action="..." method="post">
<TABLE>
  <TR>
    <TD><LABEL for="nom">Nom</LABEL>
    <TD><INPUT type="text" name="nom" id="nom">
  <TR>
    <TD><LABEL for="pnom">Prénom</LABEL>
    <TD><INPUT type="text" name="prenom" id="pnom">
</TABLE>
<FORM>

L'exemple suivant étend un exemple de formulaire antérieur pour y inclure des éléments LABEL. Notez que les éléments LABEL sont associés aux éléments INPUT via l'attribut id.

 <FORM action="http://somesite.com/prog/adduser" method="post">
    <P>
    <LABEL for="firstname">Nom : </LABEL><INPUT 
              type="text" id="firstname"><BR>
    <LABEL for="lastname">Prénom : </LABEL><INPUT 
              type="text" id="lastname"><BR>
    <LABEL for="email"email: </LABEL><INPUT 
              type="text" id="email"><BR>
    <INPUT type="radio" name="sexe" value="Homme"> Homme<BR>
    <INPUT type="radio" name="sexe" value="Femme"> Femme<BR>
    <INPUT type="submit" value="Send"> <INPUT type="reset">
 </FORM>

Un même contrôle peut être associé à plusieurs éléments LABEL, lesquels constituent des références multiples via leur attribut for.

Pour associer un label implicitement à un autre contrôle, il suffit de placer le contrôle comme contenu de l'élément LABEL. Dans ce cas, l'élément LABEL ne pourra contenir qu'un seul élément contrôle. Le texte du label pourra, quant à lui, être positionné avant ou après le contrôle.

Dans l'exemple suivant, nous associons implicitement deux labels et leurs éléments INPUT associés respectifs. Remarquez que cette association implicite nous évite d'avoir à gérer la mise en page des labels et des champs de saisie dans un tableau (voir l'exemple précédent).

<FORM action="..." method="post">
<LABEL>
   Nom
   <INPUT type="text" name="nom">
</LABEL>
<LABEL>
   <INPUT type="text" name="prenom">
   Prénom
</LABEL>
</FORM>

Les éléments FIELDSET et LEGEND 

<!--
  #PCDATA is to solve the mixed content problem,
  per specification only whitespace is allowed there!
 -->
<!ELEMENT FIELDSET - - (#PCDATA,LEGEND,%block)>
<!ATTLIST FIELDSET
  %attrs;                          -- %coreattrs, %i18n, %events --
  >

<!ELEMENT LEGEND - - (%inline;)+>
<!ENTITY % LAlign "(top|bottom|left|right)">

<!ATTLIST LEGEND            -- fieldset legend --
  %attrs;                          -- %coreattrs, %i18n, %events --
  align       %LAlign;   #IMPLIED  -- relativement au groupe de champs --
  accesskey   CDATA      #IMPLIED  -- touche d'accessibilité --
  >

Balise de début : requise, Balise de fin : requise

LEGEND Définition des attributs

align = top|bottom|left|right
Cet attribut spécifie la position de la légende par rapport au groupe de champs. Valeurs possibles :
  • top : La légende est placée au dessus du groupe de champs. C'est la valeur par défaut.
  • bottom : La légende est placée en dessous du groupe de champs.
  • left : La légende est placée à gauche du groupe de champs.
  • right : La légende est placée à droite du groupe de champs.

Attributs définis par ailleurs

L'élément FIELDSET permet aux concepteurs de formulaires de grouper des contrôles par thèmes. Le regroupement de contrôles amène une plus grande compréhension de la part des utilisateurs du formulaire tout en facilitant la gestion de la tabulation pour les agents utilisateurs visuels, et la gestion de commande vocale pour les navigateurs vocaux. Un usage approprié de cette implémentation permet de faciliter l'accès aux formulaires à ceraines catégories de personnes handicapées.

L'élément LEGEND permet aux concepteurs de rajouter une légende à un élément FIELDSET. La légende augmente l'accessibilité lorsque le FIELDSET n'est pas représenté graphiquement. Si c'est le cas cependant, l'attribut align de l'élément LEGEND alignera ce titre relativement au FIELDSET.

Dans l'exemple suivant, nous créons un formulaire qu'un patient pourrait remplir dans un cabinet médical. Il est divisé en trois sections : Les informations personnelles, les antécédents médicaux, et le traitement actuel. Chaque section accueille les champs de saisie propres à sa destination.

<FORM action="..." method="post">
<FIELDSET>
<LEGEND align="top">Personal Information</LEGEND>
Last Name: <INPUT name="personal_lastname" type="text" tabindex="1">
First Name: <INPUT name="personal_firstname" type="text" tabindex="2">
Address: <INPUT name="personal_address" type="text" tabindex="3">
...more personal information...
</FIELDSET>
<FIELDSET>
<LEGEND align="top">Medical History</LEGEND>
<INPUT name="history_illness" 
       type="checkbox" 
       value="Smallpox" tabindex="20"> Smallpox</INPUT>
<INPUT name="history_illness" 
       type="checkbox" 
       value="Mumps" tabindex="21"> Mumps</INPUT>
<INPUT name="history_illness" 
       type="checkbox" 
       value="Dizziness" tabindex="22"> Dizziness</INPUT>
<INPUT name="history_illness" 
       type="checkbox" 
       value="Sneezing" tabindex="23"> Sneezing</INPUT>
...more medical history...
</FIELDSET>
<FIELDSET>
<LEGEND align="top">Current Medication</LEGEND>
Are you currently taking any medication? 
<INPUT name="medication_now" 
       type="radio" 
       value="Yes" tabindex="35">Yes</INPUT>
<INPUT name="medication_now" 
       type="radio" 
       value="No" tabindex="35">No</INPUT>

If you are currently taking medication, please indicate
it in the space below:
<TEXTAREA name="current_medication" 
          rows="20" cols="50"
          tabindex="40">
</TEXTAREA>
</FIELDSET>
</FORM>

Notez que, dans cet exemple, nous pourrions améliorer la présentation du formulaire en alignant les éléments dans chaque FIELDSET (par des feuilles de style), en ajoutant de la couleur et des informations de police (par des feuilles de style), en ajoutant du script (par exemple, en n'autorisant la section "traitement actuel" que lorsque le patient indiquera qu'il est actuellement sous traitement), etc.

Donner le focus à un élément 

Les éléments actifs de documents HTML doivent être focalisés par l'utilisateur pour pouvoir accomplir leur fonction d'interface. Par exemple, les utilisateurs doivent focaliser et actionner un lien spécifié par l'élément A de façon à pouvoir suivre le lien. De même, les utilisateurs doivent donner le "focus" à un TEXTAREA pour pouvoir y entrer du texte.

Ce "focus" peut être donné de plusieurs manières :

Navigation tabulée 

Définition des attributs

tabindex = integer
Cet attribut spécifie la position de l'élément dans l'ordre de tabulation défini pour le document courant. Cette valeur pourra être un entier positif ou négatif.

L'ordre de tabulation définit l'ordre dans leque les éléments recevront le "focus" lorsque l'utilisateur les balaye par le clavier. L'ordre de tabulation peut inclure des éléments inclus dans d'autres éléments.

Un agent utilisateur naviguera à travers des éléments qui peuvent recevoir le "focus", en respectant les règles suivantes :

  1. Les éléments qui supportent l'attribut tabindex dont la valeur assignée est positive serotn atteints en premier. La navigation commence par l'indice de tabulation tabindex le plus faible pour terminer au plus fort. Les valeurs ne sont pas tenues de respecter une séquence continue et la valeur de départ est indifférente. Les éléments qui affichent un indice tabindex identique seront atteints dans l'ordre où ils figurent dans le document.
  2. Les éléments pour lesquels l'attribut tabindex n'est pas défini, ou qui ne supportent pas cet attribut sont balayés en premier, dans l'ordre où ils figurent dans le document.
  3. Les éléments qui supportent l'attribut tabindex mais en détiennent une valeur négative ne seront pas balayés.
  4. Les éléments désactivés ne sont pas pris en compte dans la tabulation.

Les éléments suivant supportent l'attribut tabindex : A, AREA, OBJECT, INPUT, SELECT, TEXTAREA, et BUTTON.

Dans l'exemple qui suit, l'ordre de tabulation permettra d'atteindre d'abord le BUTTON, puis les champs INPUT dans l'ordre (notez que le "champ1" et le bouton partagent le même indice, mais "champ1" apparaît plus loin dans le document), et enfin le lien créé par l'élément A.

<HTML>
<BODY>
...du texte...
Cliquez pour vous rendre sur le 
<A tabindex="10" href="http://www.w3.org/">site Web du W3C.</A>
...encore du texte...
<BUTTON type="button" name="get-database"
           tabindex="1" onclick="get-database">
Cliquez-moi pour recevoir la base de données indiquée.
</BUTTON>
...encore...
<FORM action="..." method="post">
<INPUT tabindex="1" type="text" name="champ1">
<INPUT tabindex="2" type="text" name="champ2">
<INPUT tabindex="3" type="submit" name="submit">
</FORM>
</BODY>
</HTML>

Touches de tabulation. La séquence de touche effective qui provoque la navigation tabulée où la sélection d'un élément particulier dépend de la configuration de l'agent utilisateur (ex., la touche "tab" sera utilisée pour la navigation tandis que la touche "enter" servira à activer l'élément sélectionné).

Les agents utilisateurs définiront de plus des séquences de touches pour effectuer la navigation en sens inverse. Lorsque la fin (ou le début) de la séquence de tabulation est atteinte, les agents utilisateurs pourront reboucler la navigation.

Touches d'accessibilité 

Définition des attributs

accesskey = cdata
Cet attribut affecte une touche d'accessibilité à un élément. Une touche d'accessibilité est un simple caractère du jeu de caractère courant de l'agent utilisateur. Les agent utilisateurs doivent ignorer la casse de cet attribut.

L'action de presser une touche d'accessibilité assignée à un élément donnera le "focus" à cet élément. L'action exécutée par l'élément, lorsqu'il acquiert le "focus", dépend de la nature de celui-ci. Les liens spécifiés par un élément A serotn en génral activés par l'agent utilisateur, un bouton radio activé changera d'état, les champs de texte se mettront en mode saisie, etc.

Les éléments suivants supportent l'attribut accesskey : LABEL, A, CAPTION, et LEGEND.

L'exemple qui suit assigne la touche "U" au label associé à un contrôle INPUT. En tapant cette touche d'accessibilité, le label acquiert le "focus" qui est alors immédiatement redonné à l'élément associé. L'utilisateur peut alors entrer du texte dans le champ INPUT.

<FORM action="..." method="post">
<LABEL for="user" accesskey="U">
User Name
</LABEL>
<INPUT type="text" name="user">
</FORM>

Dansl'exemple suivant, nous assignons une touche d'accessibilité au lien défini par un élément A. Taper cette touche d'accessibilité amènera l'utilisateur au document pointé par ce lien, dans ce cas, une table des matières.

<A accesskey="C" 
      href="http://somplace.com/specification/sommaire.html">
    Table des Matières</A>

L'invocation des touches d'accessibilité dépend du système sous-jacent. Par exemple, sur des machines sous MS Windows, la touche "alt" doit être appuyée pour que les touches deviennent des touches d'accessibilité. Sur des systèmes Apple, c'est la touche "cmd" ("pomme !") qui provoque ce basculement.

La représentation des touches d'accessibilité dépend de l'agent utilisateur. Nous recommandons que les auteurs mentionnent les touches d'accessibilité dans les labels associés aux éléments qu'elles contrôlent. Les agents utilisateurs afficheront cette mention d'une façon qui rende cet affichage explicite, et parfaitement distinct des caractères usuels (par soulignement, par exemple).

Eléments désactivés ou en lecture seule 

Dans un contexte où la modification de valeur par un utilisateur n'est pas souhaîtable, ou n'a pas de sens, il est important de pouvoir désactiver un élément, et de pouvoir l'afficher de sorte qu'il ne puisse qu'être lu. Par exemple, on souhaiterait pouvoir désactiver un bouton de soumission, jusqu'à ce que l'utilisateur ait rentré une certaine donnée obligatoire. De même, un concepteur souhaiterait pouvoir afficher des valeurs qui doivent être soumises par le formulaire, mais que l'utilisateur ne doit pas modifier. Les sections qui suivent décrivent ces éléments désactivés ou verrouillés en écriture.

Eléments désactivés 

Définition des attributs

disabled
Lorsqu'il est défini pour un contrôle de formulaire, cet attribut booléen désactive le contrôle.

La présence de l'attribut disabled a les effets suivants sur l'élément :

Les éléments suivant supportent l'attribut disabled : INPUT, TEXTAREA, SELECT, OPTION, OBJECT, LABEL, et BUTTON.

La façon dont des éléments désactivés sont affichés dépend de l'agent utilisateur. Par exemple, certains agents "grisent" les éléments de menus désactivés, les libellés de boutons, etc.

Dans l'exemple qui suit, le champ INPUT désactivé ne peut recevoir d'information, et sa valeur ne sera pas émise lors de la soumission du formulaire.

<INPUT disabled name="fred" value="stone">

Note : La seule façon de modifier la valeur dynamiquemnt d'un élément disabled est l'usage d'un script.

Eléments en lecture seule 

Définition des attributs

readonly
Lorsqu'il est défini pour un contrôle de formulaire, cet attribut booléen interdit toute modification de la valeur du contrôle.

L'attribut readonly spécifie si l'élément peut ou ne peut pas être modifié par l'utilisateur.

La présence de l'attribut readonly a les effets suivants sur un élément :

Les éléments suivant supportent l'attribut readonly : INPUT, TEXT, PASSWORD, et TEXTAREA.

La façon dont les agents utilisateurs affichent les éléments en lecture seule dépend de chaque agent.

Note : La seule façon de modifier la valeur dynamiquemnt d'un élément readonly est par l'usage d'un script.

Soumission 

Quelles valeurs d'éléments sont soumises ? 

Tous les éléments ne sont pas soumis avec le formulaire. Les agents utilisateurs conformes ignoreront :