Sobre este problema HTML
O atributo name num elemento <input> identifica os dados do controlo de formulário quando o formulário é enviado. Atua como a chave no par chave-valor enviado para o servidor (ex.: email=user@example.com). Quando define name="", o atributo está presente mas contém uma string vazia, que a especificação HTML considera um valor inválido. Um nome vazio significa que os dados do input serão excluídos do payload de envio do formulário na maioria dos navegadores, tornando-o funcionalmente inútil para o processamento de formulários.
Esta questão é importante por várias razões:
- Funcionalidade do formulário: Inputs com nomes vazios são tipicamente omitidos dos dados do formulário, pelo que o servidor nunca recebe o input do utilizador.
-
Conformidade com padrões: A especificação HTML requer que se o atributo
nameestiver presente, o seu valor não pode estar vazio. -
Referências JavaScript: Um
namevazio torna difícil referenciar o elemento usando métodos comodocument.getElementsByName()ouFormData. -
Acessibilidade: Leitores de ecrã e tecnologias assistivas podem usar o atributo
namepara ajudar a identificar controlos de formulário, e um valor vazio não fornece informação útil.
Note que o atributo name não é tecnicamente obrigatório em todos os elementos <input> — é perfeitamente válido omiti-lo completamente. Por exemplo, inputs usados puramente para interações JavaScript do lado do cliente sem envio de formulário não precisam de um name. O erro surge especificamente quando o atributo está presente mas definido como uma string vazia.
Para corrigir a questão, atribua um nome significativo que descreva os dados que o input recolhe, ou remova o atributo name completamente se o input não fizer parte de um envio de formulário.
Exemplos
❌ Atributo name vazio despoleta o erro
<form action="/submit" method="post">
<label for="email">Email:</label>
<input type="email" id="email" name="">
<button type="submit">Submit</button>
</form>
✅ Fornecer um valor name significativo
<form action="/submit" method="post">
<label for="email">Email:</label>
<input type="email" id="email" name="email">
<button type="submit">Submit</button>
</form>
✅ Remover name quando o input não é enviado
Se o input for usado apenas para interação do lado do cliente e não precisar de fazer parte dos dados do formulário, simplesmente omita o atributo:
<label for="search">Filter results:</label>
<input type="text" id="search">
❌ Múltiplos inputs com nomes vazios
Este padrão às vezes aparece quando os inputs são gerados dinamicamente com atributos placeholder:
<form action="/register" method="post">
<input type="text" name="">
<input type="password" name="">
<button type="submit">Register</button>
</form>
✅ Cada input recebe um nome descritivo
<form action="/register" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username">
<label for="password">Password:</label>
<input type="password" id="password" name="password">
<button type="submit">Register</button>
</form>
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.