Sobre este problema HTML
O atributo action indica ao navegador para onde enviar os dados do formulário quando este é submetido. De acordo com o padrão WHATWG HTML living standard, se o atributo action for especificado, o seu valor deve ser um URL válido e não vazio potencialmente rodeado por espaços. Uma string vazia ("") não satisfaz este requisito, razão pela qual o validador W3C a sinaliza.
Embora alguns programadores usem action="" com a intenção de que o formulário seja submetido para o URL da página atual, esta abordagem não está em conformidade com HTML. Os navegadores normalmente interpretam um action vazio como “submeter para o URL atual”, mas confiar neste comportamento é desnecessário, uma vez que simplesmente omitir o atributo action consegue o mesmo resultado de forma compatível com os padrões. Quando não está presente nenhum atributo action, o formulário é submetido para o URL da página que contém o formulário — este é o comportamento padrão definido pela especificação HTML.
Esta questão é importante por várias razões:
- Conformidade com padrões: HTML não conforme pode levar a comportamento inesperado em diferentes navegadores ou versões futuras de navegadores.
-
Manutenibilidade: Usar a abordagem correta torna a sua intenção mais clara para outros programadores. Omitir
actionsinaliza explicitamente “submeter para a página atual”, enquantoaction=""parece um erro ou um placeholder que nunca foi preenchido. - Ferramentas: Ferramentas de build, linters e pipelines de testes automatizados que dependem de HTML válido podem sinalizar ou falhar com este erro.
Como corrigir
Tem duas opções:
-
Remover o atributo
actionse quiser que o formulário seja submetido para o URL da página atual. - Fornecer um URL válido se o formulário deve ser submetido para um endpoint específico.
Exemplos
❌ Inválido: Atributo action vazio
<form action="" method="post">
<label for="email">Email:</label>
<input type="email" id="email" name="email">
<button type="submit">Subscribe</button>
</form>
Isto desencadeia o erro: Valor inválido “” para o atributo “action” no elemento “form”: Deve ser não vazio.
✅ Corrigido: Remover o atributo action
Se quiser que o formulário seja submetido para a página atual, simplesmente omita action:
<form method="post">
<label for="email">Email:</label>
<input type="email" id="email" name="email">
<button type="submit">Subscribe</button>
</form>
✅ Corrigido: Fornecer um URL válido
Se o formulário deve ser submetido para um endpoint específico, forneça o URL:
<form action="/subscribe" method="post">
<label for="email">Email:</label>
<input type="email" id="email" name="email">
<button type="submit">Subscribe</button>
</form>
✅ Corrigido: Usar um hash como placeholder para formulários geridos por JavaScript
Se o seu formulário é totalmente gerido por JavaScript e não deve navegar para lado nenhum, pode usar um # como action ou, preferencialmente, omitir action e prevenir a submissão no seu script:
<form method="post" id="js-form">
<label for="query">Search:</label>
<input type="text" id="query" name="query">
<button type="submit">Search</button>
</form>
document.getElementById('js-form').addEventListener('submit', function(e) {
e.preventDefault();
// Handle form data with JavaScript
});
Neste caso, omitir action é a solução mais limpa. A chamada JavaScript preventDefault() impede que o navegador submeta efetivamente o formulário, pelo que o valor de action nunca é usado.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.