HTML el atributo: multiple

El atributo booleano multiple, si se establece, significa que el control del formulario acepta uno o más valores. Válido para los <input>s de tipo email, file (en-US) y <select>, la forma en que el usuario opta por valores múltiples depende del control del formulario.

Dependiendo del tipo, el control de formulario puede tener una apariencia diferente si se establece el atributo multiple. Para el <input> de tipo file, la mensajería nativa que proporciona el navegador es diferente. En Firefox, el <input> de tipo file dice "Ningún archivo seleccionado" cuando el atributo está presente y "Ningún archivo seleccionado", cuando no hay archivo seleccionado. La mayoría de los navegadores muestran un cuadro de lista de desplazamiento para un control <select> con el atributo multiple establecido frente a un menú desplegable de una sola línea cuando se omite el atributo. El <input> email muestra lo mismo, pero coincidirá con la pseudoclase :invalid si hay más de una dirección de correo electrónico separada por comas incluido si el atributo no está presente.

Cuando se establece multiple en el tipo de entrada email, el usuario puede incluir cero (si no es required (en-US) también), una o más direcciones de correo electrónico separadas por comas.

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

Si y solo si se especifica el atributo multiple, el valor puede ser una lista de direcciones de correo electrónico separadas por comas y formadas correctamente. Los espacios en blanco iniciales y finales se eliminan de cada dirección de la lista.

Cuando se establece multiple en el tipo de entrada file (en-US), el usuario puede seleccionar uno o más archivos. El usuario puede elegir varios archivos del selector de archivos de cualquier manera que la plataforma elegida lo permita (por ejemplo, manteniendo presionada la tecla Mayús o Control y luego haciendo clic).

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

Cuando se omite el atributo, el usuario solo puede seleccionar un único archivo por <input>.

El atributo multiple en el elemento <select> representa un control para seleccionar cero o más opciones de la lista. De lo contrario, el elemento <select> representa un control para seleccionar una única <option> de la lista de opciones.

html
<select multiple name="drawfs" id="drawfs">
  <option>Gruñón</option>
  <option>Feliz</option>
  <option>Dormilón</option>
  <option>Tímido</option>
  <option>Estornudo</option>
  <option>Tontín</option>
  <option>Doc</option>
</select>

Cuando se especifica multiple, la mayoría de los navegadores mostrarán un cuadro de lista de desplazamiento en lugar de un menú desplegable de una sola línea.

Ejemplos

input para correoᵉ

html
<label for="emails">¿A quién deseas enviar un correo electrónico?</label>
<input
  type="email"
  multiple
  name="emails"
  id="emails"
  list="drawfemails"
  required
  size="64" />

<datalist id="drawfemails">
  <option value="gruñón@woodworkers.com">Gruñón</option>
  <option value="feliz@woodworkers.com">Feliz</option>
  <option value="dormilón@woodworkers.com">Dormilón</option>
  <option value="tímido@woodworkers.com">Tímido</option>
  <option value="estornudo@woodworkers.com">Estornudo</option>
  <option value="tontín@woodworkers.com">Tontín</option>
  <option value="doc@woodworkers.com">Doc</option>
</datalist>

Si y solo si se especifica el atributo multiple, el valor puede ser una lista de direcciones de correo electrónico separadas por comas y formadas correctamente. Los espacios en blanco iniciales y finales se eliminan de cada dirección de la lista. Si el atributo required (en-US) está presente, se requiere al menos una dirección de correo electrónico.

Algunos navegadores admiten la aparición de la lista de opciones del <datalist> para direcciones de correo electrónico posteriores cuando haya varias. Otros no lo hacen.

input de tipo file

Cuando se establece multiple en el <input> de tipo file (en-US), el usuario puede seleccionar uno o más archivos:

html
<form method="post" enctype="multipart/form-data">
  <p>
    <label for="uploads"> Elige las imágenes que deseas cargar: </label>
    <input
      type="file"
      id="uploads"
      name="uploads"
      accept=".jpg, .jpeg, .png, .svg, .gif"
      multiple />
  </p>
  <p>
    <label for="text">Elige un archivo de texto para cargar: </label>
    <input type="file" id="text" name="text" accept=".txt" />
  </p>
  <p>
    <input type="submit" value="Enviar" />
  </p>
</form>

Nota la diferencia en la apariencia entre el ejemplo con multiple establecido y el otro <input> sin file.

Cuando se envía el formulario, utilizas el method='get' el nombre de cada archivo seleccionado se habría agregado a los parámetros de la URL como ?uploads=img1.jpg&uploads=img2.svg. Sin embargo, dado que estamos asumiendo datos de formularios de multipart, usamos mucho el post. Consulta el elemento <form> y envío de datos del formulario para obtener más información.

select

El atributo multiple en el elemento <select> representa un control para seleccionar cero o más opciones de la lista. De lo contrario, el elemento <select> representa un control para seleccionar una única <option> de la lista de opciones. El control generalmente tiene una apariencia diferente en función de la presencia del atributo multiple, y la mayoría de los navegadores muestran un cuadro de lista de desplazamiento en lugar de una lista desplegable de una sola línea cuando el atributo está presente.

html
<form method="get" action="#">
  <p>
    <label for="dwarfs">Selecciona los leñadores que te gusten:</label>
    <select multiple name="drawfs" id="drawfs">
      <option>gruñón@woodworkers.com</option>
      <option>feliz@woodworkers.com</option>
      <option>dormilón@woodworkers.com</option>
      <option>tímido@woodworkers.com</option>
      <option>estornudo@woodworkers.com</option>
      <option>tontín@woodworkers.com</option>
      <option>doc@woodworkers.com</option>
    </select>
  </p>
  <p>
    <label for="favoriteOnly">Selecciona tu favorito:</label>
    <select name="favoriteOnly" id="favoriteOnly">
      <option>gruñón@woodworkers.com</option>
      <option>feliz@woodworkers.com</option>
      <option>dormilón@woodworkers.com</option>
      <option>tímido@woodworkers.com</option>
      <option>estornudo@woodworkers.com</option>
      <option>tontín@woodworkers.com</option>
      <option>doc@woodworkers.com</option>
    </select>
  </p>
  <p>
    <input type="submit" value="Enviar" />
  </p>
</form>

Ten en cuenta la diferencia de apariencia entre los dos controles de formulario.

css
/* descomenta este CSS para que el multiple tenga la misma altura que single */

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

Hay varias formas de seleccionar varias opciones en un elemento <select> con un atributo multiple. Dependiendo del sistema operativo, los usuarios del ratón pueden mantener presionadas las teclas Ctrl, Comando o Mayús y luego hacer clic en varias opciones para seleccionarlas o deseleccionarlas. Los usuarios de teclado pueden seleccionar varios elementos contiguos centrándose en el elemento <select>, seleccionando un elemento en la parte superior o inferior del rango que desean seleccionar usando Arriba y Teclas del cursor hacia abajo para subir y bajar las opciones. La selección de elementos no contiguos no es tan compatible: los elementos se deben poder seleccionar y deseleccionar presionando Espacio, pero el soporte varía entre los navegadores.

Especificaciones

Specification
HTML Standard
# attr-input-multiple

Problemas de accesibilidad

Proporciona instrucciones para ayudar a los usuarios a comprender cómo completar el formulario y utilizar controles de formulario individuales. Indica cualquier entrada requerida y opcional, formatos de datos y otra información relevante. Cuando utilices el atributo multiple, informa al usuario que se permiten múltiples valores y proporciona instrucciones sobre cómo proveer más valores, como "direcciones de correo electrónico separadas con una coma".

Configurar size (en-US) ="1" en una selección múltiple puedes hacer que aparezca como una única selección en algunos navegadores, pero luego no se expande en el enfoque, lo que perjudica la usabilidad. No hagas eso. Si cambias la apariencia de un select, e incluso si no lo haces, asegúrate de informar al usuario que se puede seleccionar más de una opción mediante otro método.

Ve también