Attribut HTML : multiple
========================

L'attribut booléen **`multiple`**, s'il est défini, signifie que le contrôle de formulaire accepte une ou plusieurs valeurs. Valable pour les types de saisie `email` et `file` et l'élément `<select>`, la manière dont l'utilisateur opte pour plusieurs valeurs dépend du contrôle de formulaire.

Selon le type, le contrôle de formulaire peut avoir une apparence différente si l'attribut `multiple` est défini. Pour le type de saisie de fichier, la messagerie native fournie par le navigateur diffère. Dans Firefox, l'entrée de fichier indique « Aucun fichier sélectionné » lorsque l'attribut est présent et « Aucun fichier sélectionné » dans le cas contraire, lorsqu'aucun fichier n'est sélectionné. La plupart des navigateurs affichent une zone de liste déroulante pour un contrôle `<select>` avec l'attribut `multiple` défini contre une liste déroulante à une ligne lorsque l'attribut est omis. L'entrée `email` s'affiche de la même manière, mais correspondra à la pseudo-classe `:invalid` si plus d'une adresse électronique séparée par des virgules est incluse en l'absence de l'attribut.

Lorsque `multiple` est défini sur le type de saisie `email`, l'utilisateur peut inclure zéro (si ce n'est pas également `required`), une ou plusieurs adresses électroniques séparées par des virgules.


```html
<input type="email" multiple name="emails" id="emails" />
```


Si et seulement si l'attribut `multiple` est spécifié, la valeur peut être une liste d'adresses électroniques correctement formées et séparées par des virgules. Tout espace blanc de queue et de tête est supprimé de chaque adresse de la liste.

Lorsque `multiple` est défini sur le type d'entrée `file`, l'utilisateur peut sélectionner un ou plusieurs fichiers. L'utilisateur peut choisir plusieurs fichiers dans le sélecteur de fichiers de n'importe quelle manière que la plateforme qu'il a choisie permet (par exemple, en maintenant la touche `Maj` ou `Ctrl` enfoncée, puis en cliquant).


```html
<input type="file" multiple name="uploads" id="uploads" />
```


Lorsque l'attribut est omis, l'utilisateur ne peut sélectionner qu'un seul fichier par `<input>`.

L'attribut `multiple` de l'élément `<select>` représente un contrôle permettant de sélectionner zéro ou plusieurs options dans la liste d'options. Sinon, l'élément `<select>` représente un contrôle permettant de sélectionner une seule `<option>` dans la liste d'options.


```html
<select multiple name="dwarfs" id="dwarfs">
  <option>Grincheux</option>
  <option>Joyeux</option>
  <option>Dormeur</option>
  <option>Timide</option>
  <option>Atchoum</option>
  <option>Simplet</option>
  <option>Doc</option>
</select>
```


Lorsque `multiple` est spécifié, la plupart des navigateurs affichent une boîte de liste défilante au lieu d'une liste déroulante à ligne unique.

Exemples
--------

### Saisie d'adresses électroniques


```html
<label for="emails">A qui voulez-vous adresser un courriel ?</label>
<input
 type="email"
 multiple
 name="emails"
 id="emails"
 list="dwarfemails"
 required
 size="64" />

<datalist id="dwarfemails">
  <option value="grincheux@menuisiers.fr">Grincheux</option>
  <option value="joyeux@menuisiers.fr">Joyeux</option>
  <option value="dormeur@menuisiers.fr">Dormeur</option>
  <option value="timide@menuisiers.fr">Timide</option>
  <option value="atchoum@menuisiers.fr">Atchoum</option>
  <option value="simplet@menuisiers.fr">Simplet</option>
  <option value="doc@menuisiers.fr">Doc</option>
</datalist>
```



```css
input:invalid {
  border: red solid 3px;
}
```


Si et seulement si l'attribut `multiple` est spécifié, la valeur peut être une liste d'adresses électroniques correctement formées et séparées par des virgules. Tout espace blanc de queue et de tête est supprimé de chaque adresse de la liste. Si l'attribut `required` est présent, au moins une adresse électronique est requise.

Certains navigateurs prennent en charge l'apparition de la liste d'options de la `<datalist>` pour les adresses électroniques ultérieures lorsque `multiple` est présent. D'autres ne le font pas.

### Saisie de fichiers

Lorsque `multiple` est défini sur le type de saisie `file`, l'utilisateur peut sélectionner un ou plusieurs fichiers :


```html
<form method="post" enctype="multipart/form-data">
  <p>
    <label for="uploads">
      Choisissez les images que vous voulez télécharger :
    </label>
    <input
 type="file"
 id="uploads"
 name="uploads"
 accept=".jpg, .jpeg, .png, .svg, .gif"
 multiple />
  </p>
  <p>
    <label for="text">Choisissez un fichier texte à télécharger :</label>
    <input type="file" id="text" name="text" accept=".txt" />
  </p>
  <p>
    <input type="submit" value="Soumettre" />
  </p>
</form>
```


Notez la différence d'aspect entre l'exemple avec `multiple` défini et l'autre entrée `file` sans.

Lorsque le formulaire est soumis, si nous avions utilisé `method="get"` le nom de chaque fichier sélectionné aurait été ajouté aux paramètres de l'URL sous la forme `?uploads=img1.jpg&uploads=img2.svg`. Cependant, étant donné que nous sommes en train d'additionner les données du formulaire multipart, nous devons utiliser POST. Voir l'élément `<form>` et l'envoi de données de formulaire pour plus d'informations.

### Saisir plusieurs options

L'attribut `multiple` de l'élément `<select>` représente un contrôle permettant de sélectionner zéro ou plusieurs options dans la liste d'options. Sinon, l'élément `<select>` représente un contrôle permettant de sélectionner une seule `<option>` dans la liste des options. L'apparence du contrôle varie généralement en fonction de la présence de l'attribut multiple, la plupart des navigateurs affichant une liste déroulante à défilement au lieu d'une liste déroulante à ligne unique lorsque l'attribut est présent.


```html
<form method="get" action="#">
  <p>
    <label for="dwarfs">Sélectionnez les menuisiers que vous aimez :</label>
    <select multiple name="dwarfs" id="dwarfs">
      <option>grincheux@menuisiers.fr</option>
      <option>joyeux@menuisiers.fr</option>
      <option>dormeur@menuisiers.fr</option>
      <option>timide@menuisiers.fr</option>
      <option>atchoum@menuisiers.fr</option>
      <option>simplet@menuisiers.fr</option>
      <option>doc@menuisiers.fr</option>
    </select>
  </p>
  <p>
    <label for="favoriteOnly">Sélectionnez votre préféré :</label>
    <select name="favoriteOnly" id="favoriteOnly">
      <option>grincheux@menuisiers.fr</option>
      <option>joyeux@menuisiers.fr</option>
      <option>dormeur@menuisiers.fr</option>
      <option>timide@menuisiers.fr</option>
      <option>atchoum@menuisiers.fr</option>
      <option>simplet@menuisiers.fr</option>
      <option>doc@menuisiers.fr</option>
    </select>
  </p>
  <p>
    <input type="submit" value="Soumettre" />
  </p>
</form>
```


Notez la différence d'apparence entre les deux contrôles de formulaire.


```css
/\* Décommentez ce CSS pour que le sélecteur multiple ait la même hauteur que le simple. \*/

/\*
select[multiple] {
 height: 1.5em;
 vertical-align: top;
}
select[multiple]:focus,
select[multiple]:active {
 height: auto;
}
\*/
```


Il existe plusieurs façons de sélectionner plusieurs options dans un élément `<select>` avec un attribut `multiple`. Selon le système d'exploitation, les utilisateurs de souris peuvent maintenir les touches `Ctrl`, `Commande` ou `Maj` enfoncées, puis cliquer sur plusieurs options pour les sélectionner/désélectionner. Les utilisateurs du clavier peuvent sélectionner plusieurs éléments contigus en ciblant l'élément `<select>`, en sélectionnant un élément en haut ou en bas de la plage qu'ils souhaitent sélectionner à l'aide des touches de curseur `Haut` et `Bas` pour monter et descendre dans les options. La sélection de non-contigus n'est pas aussi bien supportée : les éléments devraient pouvoir être sélectionnés et désélectionnés en appuyant sur `Espace` , mais le support varie selon les navigateurs.

Accessibilité
-------------

Fournissez des instructions pour aider les utilisateurs à comprendre comment remplir le formulaire et utiliser les contrôles individuels du formulaire. Indiquez toute entrée obligatoire et facultative, les formats de données et toute autre information pertinente. Lorsque vous utilisez l'attribut `multiple`, informez l'utilisateur que plusieurs valeurs sont autorisées et donnez des indications sur la manière de fournir plusieurs valeurs, par exemple « séparez les adresses électroniques par une virgule ».

Définir `size="1"` sur une sélection multiple peut la faire apparaître comme une sélection unique dans certains navigateurs, mais elle ne s'étend alors pas au focus, ce qui nuit à la convivialité. Ne faites pas cela. Si vous modifiez l'apparence d'une sélection, et même si vous ne le faites pas, veillez à informer l'utilisateur que plusieurs options peuvent être sélectionnées par une autre méthode.

Spécifications
--------------

| Specification |
| --- |
| HTML Standard # attr-input-multiple |

Voir aussi
----------

* L'élément `<input>`
* L'élément `<select>`
* Autoriser les adresses électroniques multiples