Acerca de este problema HTML
El atributo multiple le dice al navegador que el usuario puede proporcionar más de un valor para un input determinado. Para <input type="file">, permite seleccionar múltiples archivos a la vez. Para <input type="email">, permite introducir una lista de direcciones de correo separadas por comas. Estos son los únicos dos tipos de input que soportan el atributo multiple según la especificación HTML.
Este error de validación puede aparecer por dos razones distintas, y a veces por ambas a la vez:
-
Se asigna un valor inválido al atributo booleano. Los atributos booleanos en HTML siguen reglas estrictas. Las sintaxis válidas son: solo el nombre del atributo (
multiple), un valor de cadena vacía (multiple=""), o el propio nombre del atributo como valor (multiple="multiple"). Cualquier otro valor — incluyendomultiple="true",multiple="1", omultiple="yes"— es inválido. -
El atributo se usa en un tipo de input no soportado. Colocar
multipleen tipos de input comotext,number,password, ourlno es válido porque esos tipos no definen comportamiento para este atributo. Los navegadores simplemente lo ignorarán, pero aún así constituye marcado inválido.
Por qué es importante
-
Cumplimiento de estándares: Los valores de atributos booleanos inválidos violan la especificación HTML de WHATWG. Aunque la mayoría de navegadores son permisivos y pueden interpretar
multiple="true"como que el atributo está presente, depender de este comportamiento es frágil y no estándar. - Accesibilidad: Las tecnologías de asistencia dependen de un marcado válido y bien estructurado. Un valor de atributo inválido podría llevar a comportamientos impredecibles en lectores de pantalla u otras herramientas.
-
Mantenibilidad: Usar
multipleen un tipo de input no soportado sugiere una mala comprensión de las capacidades del elemento, lo que puede confundir a otros desarrolladores y llevar a errores.
Cómo solucionarlo
-
Elimina el valor completamente: Cambia
multiple="1"omultiple="true"a simplementemultiple. -
Usa una sintaxis booleana válida si se requiere un valor: Algunos sistemas de plantillas o contextos basados en XML (como XHTML) requieren valores de atributos explícitos. En esos casos, usa
multiple=""omultiple="multiple". -
Asegúrate de que el tipo de input soporte
multiple: Solotype="email"ytype="file"aceptan este atributo. Si necesitas entrada de múltiples valores para otros tipos, considera enfoques alternativos como múltiples inputs separados, un elemento<select multiple>, o una solución basada en JavaScript.
Ejemplos
Inválido: valor incorrecto en un atributo booleano
<!-- Malo: "1" no es un valor de atributo booleano válido -->
<input type="file" name="attachments" multiple="1">
<!-- Malo: "true" no es un valor de atributo booleano válido -->
<input type="email" name="recipients" multiple="true">
Inválido: multiple en un tipo de input no soportado
<!-- Malo: type="text" no soporta el atributo multiple -->
<input type="text" name="tags" multiple>
<!-- Malo: type="number" no soporta el atributo multiple -->
<input type="number" name="quantities" multiple>
Válido: uso correcto de multiple
<!-- Correcto: atributo booleano sin valor -->
<input type="file" name="attachments" multiple>
<!-- Correcto: valor de cadena vacía (sintaxis booleana válida) -->
<input type="email" name="recipients" multiple="">
<!-- Correcto: nombre del atributo como valor (válido para compatibilidad con XHTML) -->
<input type="file" name="documents" multiple="multiple">
Documento completo corregido
<!DOCTYPE html>
<html lang="en">
<head>
<title>Upload Form</title>
</head>
<body>
<form action="/submit" method="post" enctype="multipart/form-data">
<label for="recipients">Recipients:</label>
<input type="email" id="recipients" name="recipients" multiple placeholder="a@example.com, b@example.com">
<label for="files">Attachments:</label>
<input type="file" id="files" name="files" multiple>
<button type="submit">Send</button>
</form>
</body>
</html>
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.