Sobre este problema HTML
O atributo autocomplete em elementos <form> controla se o navegador deve preencher automaticamente os campos do formulário com base em dados introduzidos anteriormente. Ao contrário do autocomplete em elementos <input> — que aceita um conjunto rico de tokens como "name", "email", "street-address", etc. — o próprio elemento <form> aceita apenas dois valores: "on" e "off".
Uma solução alternativa comum que ganhou popularidade foi definir autocomplete="nope" (ou outros valores inventados como "new-password", "false", ou "disabled") no elemento <form>. Este truque explorava o facto de alguns navegadores tratarem qualquer valor não reconhecido como um sinal para desativar o autocomplete. No entanto, este comportamento não é padrão e não é fiável — os navegadores podem ignorar completamente valores inválidos e voltar ao seu comportamento padrão, que é tipicamente "on".
Usar valores de atributo inválidos causa vários problemas:
- Conformidade com os padrões: A especificação HTML define explicitamente os valores permitidos, e os validadores vão sinalizar qualquer outro como um erro.
- Comportamento imprevisível: Diferentes navegadores lidam com valores inválidos de forma diferente. O que funciona num navegador hoje pode deixar de funcionar na próxima atualização.
- Acessibilidade e experiência do utilizador: As tecnologias assistivas e funcionalidades do navegador dependem de valores de atributo padrão para funcionarem corretamente. Valores inválidos podem interferir com gestores de palavras-passe e ferramentas de preenchimento automático das quais muitos utilizadores dependem.
Vale a pena notar que mesmo com autocomplete="off", alguns navegadores (particularmente o Chrome) podem ainda preencher automaticamente certos campos como credenciais de login por razões de segurança. Se precisar de um controlo mais granular, aplique atributos autocomplete diretamente em elementos <input> individuais usando os tokens de preenchimento automático apropriados da especificação.
Exemplos
❌ Inválido: Usar um valor inventado num formulário
<form autocomplete="nope" action="/submit" method="post">
<label for="username">Username</label>
<input type="text" id="username" name="username">
<button type="submit">Submit</button>
</form>
Isto desencadeia o erro Valor inválido “nope” para o atributo “autocomplete” no elemento “form” porque "nope" não é um valor de autocomplete válido para <form>.
✅ Corrigido: Usar o valor correto para desativar o autocomplete
<form autocomplete="off" action="/submit" method="post">
<label for="username">Username</label>
<input type="text" id="username" name="username">
<button type="submit">Submit</button>
</form>
✅ Usar autocomplete em inputs individuais para mais controlo
Se precisar de desativar o autocomplete para campos específicos mantendo outros ativos, aplique o atributo diretamente nos elementos <input>:
<form action="/submit" method="post">
<label for="username">Username</label>
<input type="text" id="username" name="username" autocomplete="username">
<label for="secret">One-time code</label>
<input type="text" id="secret" name="secret" autocomplete="off">
<button type="submit">Submit</button>
</form>
Neste exemplo, o campo de nome de utilizador usa o token de preenchimento automático padrão "username" para ajudar os navegadores a preenchê-lo corretamente, enquanto o campo de código único tem o autocomplete desativado uma vez que o seu valor nunca deve ser reutilizado.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.
Saiba mais: