Acerca de este problema HTML
La especificación HTML requiere que si el atributo name se usa en un elemento <form>, su valor debe ser una cadena no vacía. Un atributo name="" vacío no sirve para ningún propósito práctico: no registra el formulario en la colección nombrada document.forms, y no puede usarse como una referencia válida en scripts. El validador W3C marca esto como un error porque viola el modelo de contenido definido en el WHATWG HTML Living Standard.
El atributo name en un formulario se usa principalmente para acceder al formulario de manera programática a través de document.forms["formName"]. Cuando el valor está vacío, este mecanismo de búsqueda no funciona, por lo que el atributo se vuelve inútil. Esto es diferente del atributo id, que también identifica elementos pero participa en la navegación por fragmentos y el targeting CSS. El atributo name en <form> es específicamente para la interfaz legacy de getter nombrado document.forms.
Vale la pena señalar que el valor del atributo name en un formulario no debe ser igual a una cadena vacía, y debería ser único entre los elementos de formulario en la colección de formularios. Aunque los nombres duplicados no causarán un error de validación, pueden llevar a comportamientos inesperados al acceder a formularios por nombre en JavaScript.
Cómo solucionarlo
Tienes dos opciones:
-
Eliminar el atributo completamente. Si no estás referenciando el formulario por nombre en JavaScript, el atributo
namees innecesario. Puedes usariden su lugar para targeting CSS o JavaScript. -
Proporcionar un valor significativo y no vacío. Si necesitas referenciar el formulario a través de
document.forms, dale un nombre descriptivo que refleje su propósito.
Ejemplos
❌ Inválido: atributo name vacío
<form name="">
<label for="email">Email</label>
<input type="email" id="email" name="email">
<button type="submit">Subscribe</button>
</form>
Esto activa el error del validador porque el atributo name está presente pero tiene un valor de cadena vacía.
✅ Solucionado: atributo eliminado
<form>
<label for="email">Email</label>
<input type="email" id="email" name="email">
<button type="submit">Subscribe</button>
</form>
Si no necesitas referenciar el formulario por nombre, simplemente elimina el atributo.
✅ Solucionado: nombre significativo proporcionado
<form name="subscriptionForm">
<label for="email">Email</label>
<input type="email" id="email" name="email">
<button type="submit">Subscribe</button>
</form>
Con un nombre no vacío, ahora puedes acceder al formulario en JavaScript usando document.forms["subscriptionForm"] o document.forms.subscriptionForm.
✅ Alternativa: usar id en su lugar
<form id="subscription-form">
<label for="email">Email</label>
<input type="email" id="email" name="email">
<button type="submit">Subscribe</button>
</form>
En el desarrollo moderno, usar id con document.getElementById() o document.querySelector() es a menudo preferido sobre el atributo name para la identificación de formularios. El atributo name en <form> es una característica legacy que sigue siendo válida pero no es requerida para la mayoría de casos de uso.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.