Acerca de este problema HTML
Los formularios HTML tienen validación de restricciones integrada que está habilitada por defecto. Cuando un usuario envía un formulario, el navegador verifica automáticamente las entradas contra sus restricciones (como required, type="email", pattern, min, max, etc.) y evita el envío si alguna validación falla. No hay necesidad de agregar un atributo validate para optar por este comportamiento porque es el predeterminado.
La especificación HTML define novalidate como un atributo booleano válido en el elemento <form> para desactivar esta validación predeterminada, pero no define un atributo validate correspondiente. Usar validate provocará un error de validación W3C porque el navegador no lo reconoce y simplemente lo ignorará.
Esto importa por varias razones:
- Cumplimiento de estándares: Los atributos inválidos hacen que tu HTML no sea conforme, lo que puede causar problemas con herramientas automatizadas de pruebas y calidad.
-
Confusión del desarrollador: Un atributo
validatesugiere que está haciendo algo funcional, pero no tiene efecto. Los futuros mantenedores pueden creer incorrectamente que está habilitando la validación y ser reacios a eliminarlo. - Accesibilidad y herramientas: Los lectores de pantalla y otras tecnologías de asistencia dependen de HTML bien formado. Los atributos no reconocidos pueden llevar a comportamientos impredecibles en algunos agentes de usuario.
Para solucionar este problema, determina tu intención:
-
Si quieres la validación de formularios habilitada — simplemente elimina el atributo
validate. La validación está activada por defecto. -
Si quieres la validación de formularios desactivada — reemplaza
validateconnovalidate.
Ejemplos
Incorrecto: usando el atributo validate inválido
<form validate action="/submit">
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<button type="submit">Enviar</button>
</form>
Esto provoca el error: Atributo “validate” no permitido en el elemento “form” en este punto.
Correcto: confiando en la validación predeterminada (atributo eliminado)
Como la validación de restricciones está habilitada por defecto, simplemente elimina el atributo inválido:
<form action="/submit">
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<button type="submit">Enviar</button>
</form>
El navegador validará automáticamente la entrada email —verificando tanto la restricción required como que el valor coincida con un formato de email válido— antes de permitir el envío.
Correcto: usando novalidate para desactivar la validación
Si tu intención es desactivar la validación integrada (por ejemplo, porque manejas la validación con JavaScript), usa el atributo novalidate en su lugar:
<form novalidate action="/submit">
<label for="city">Ciudad:</label>
<input type="text" id="city" name="city" required>
<button type="submit">Enviar</button>
</form>
En este ejemplo, aunque la entrada tiene el atributo required, el navegador no evitará el envío del formulario cuando el campo esté vacío, porque novalidate le dice al navegador que omita la validación de restricciones al enviar.
Usando formnovalidate en un botón específico
Si quieres que la validación esté habilitada para el envío normal pero quieres omitirla para un botón específico (como un botón “Guardar borrador”), usa el atributo formnovalidate en ese botón en lugar de desactivar la validación para todo el formulario:
<form action="/submit">
<label for="name">Nombre:</label>
<input type="text" id="name" name="name" required>
<button type="submit">Enviar</button>
<button type="submit" formnovalidate formaction="/save-draft">Guardar borrador</button>
</form>
El botón “Enviar” aplicará la validación, mientras que el botón “Guardar borrador” la omitirá. Este enfoque te da control detallado sin necesidad de un atributo inválido.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.
Más información: