Sobre este problema HTML
A especificação HTML exige que se o atributo name for usado num elemento <form>, o seu valor deve ser uma string não vazia. Um atributo name="" vazio não serve qualquer propósito prático — não regista o formulário na coleção nomeada document.forms, e não pode ser usado como uma referência válida em scripts. O validador W3C sinaliza isto como um erro porque viola o modelo de conteúdo definido no WHATWG HTML Living Standard.
O atributo name num formulário é usado principalmente para aceder ao formulário programaticamente através de document.forms["formName"]. Quando o valor está vazio, este mecanismo de procura não funciona, pelo que o atributo torna-se sem sentido. Isto é diferente do atributo id, que também identifica elementos mas participa na navegação por fragmentos e direcionamento CSS. O atributo name em <form> é especificamente para a interface legacy document.forms named getter.
Vale a pena notar que o valor do atributo name num formulário não deve ser igual a uma string vazia, e deve ser único entre os elementos de formulário na coleção forms. Embora nomes duplicados não causem um erro de validação, podem levar a comportamento inesperado ao aceder aos formulários por nome em JavaScript.
Como corrigir
Você tem duas opções:
-
Remova o atributo completamente. Se não estiver a referenciar o formulário por nome em JavaScript, o atributo
nameé desnecessário. Pode usaridem vez disso para direcionamento CSS ou JavaScript. -
Forneça um valor significativo e não vazio. Se precisar de referenciar o formulário através de
document.forms, dê-lhe um nome descritivo que reflita o seu propósito.
Exemplos
❌ Inválido: atributo name vazio
<form name="">
<label for="email">Email</label>
<input type="email" id="email" name="email">
<button type="submit">Subscrever</button>
</form>
Isto despoleta o erro do validador porque o atributo name está presente mas tem um valor de string vazio.
✅ Corrigido: atributo removido
<form>
<label for="email">Email</label>
<input type="email" id="email" name="email">
<button type="submit">Subscrever</button>
</form>
Se não precisar de referenciar o formulário por nome, simplesmente remova o atributo.
✅ Corrigido: nome significativo fornecido
<form name="subscriptionForm">
<label for="email">Email</label>
<input type="email" id="email" name="email">
<button type="submit">Subscrever</button>
</form>
Com um nome não vazio, pode agora aceder ao formulário em JavaScript usando document.forms["subscriptionForm"] ou document.forms.subscriptionForm.
✅ Alternativa: usar id em vez disso
<form id="subscription-form">
<label for="email">Email</label>
<input type="email" id="email" name="email">
<button type="submit">Subscrever</button>
</form>
No desenvolvimento moderno, usar id com document.getElementById() ou document.querySelector() é frequentemente preferido sobre o atributo name para identificação de formulários. O atributo name em <form> é uma funcionalidade legacy que permanece válida mas não é necessária para a maioria dos casos de uso.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.