Sobre este problema HTML
Os formulários HTML têm validação de restrições integrada que está ativada por padrão. Quando um utilizador submete um formulário, o navegador verifica automaticamente as entradas contra as suas restrições (como required, type="email", pattern, min, max, etc.) e impede a submissão se alguma validação falhar. Não há necessidade de adicionar um atributo validate para ativar este comportamento porque é o padrão.
A especificação HTML define novalidate como um atributo booleano válido no elemento <form> para desativar esta validação padrão, mas não define um atributo validate correspondente. Usar validate irá desencadear um erro de validação W3C porque o navegador não o reconhece e simplesmente irá ignorá-lo.
Isto é importante por várias razões:
- Conformidade com padrões: Atributos inválidos tornam o seu HTML não-conforme, o que pode causar problemas com testes automatizados e ferramentas de qualidade.
-
Confusão para programadores: Um atributo
validatesugere que está a fazer algo funcional, mas não tem efeito. Futuros mantenedores podem incorretamente acreditar que está a ativar a validação e ser relutantes em removê-lo. - Acessibilidade e ferramentas: Leitores de ecrã e outras tecnologias assistivas dependem de HTML bem formado. Atributos não reconhecidos podem levar a comportamentos imprevisíveis em alguns agentes de utilizador.
Para corrigir este problema, determine a sua intenção:
-
Se quer a validação de formulários ativada — simplesmente remova o atributo
validate. A validação está ativa por padrão. -
Se quer a validação de formulários desativada — substitua
validatepornovalidate.
Exemplos
Incorreto: usar o atributo inválido validate
<form validate action="/submit">
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<button type="submit">Submit</button>
</form>
Isto desencadeia o erro: Atributo “validate” não é permitido no elemento “form” neste ponto.
Correto: basear-se na validação padrão (atributo removido)
Uma vez que a validação de restrições está ativada por padrão, simplesmente remova o atributo inválido:
<form action="/submit">
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<button type="submit">Submit</button>
</form>
O navegador irá automaticamente validar a entrada email — verificando tanto a restrição required como que o valor corresponde a um formato de email válido — antes de permitir a submissão.
Correto: usar novalidate para desativar a validação
Se a sua intenção é desativar a validação integrada (por exemplo, porque trata a validação com JavaScript), use o atributo novalidate em vez disso:
<form novalidate action="/submit">
<label for="city">Cidade:</label>
<input type="text" id="city" name="city" required>
<button type="submit">Submit</button>
</form>
Neste exemplo, mesmo que a entrada tenha o atributo required, o navegador não irá impedir a submissão do formulário quando o campo estiver vazio, porque novalidate diz ao navegador para saltar a validação de restrições na submissão.
Usar formnovalidate num botão específico
Se quer a validação ativada para submissão normal mas quer contorná-la para um botão específico (como um botão “Guardar Rascunho”), use o atributo formnovalidate nesse botão em vez de desativar a validação para todo o formulário:
<form action="/submit">
<label for="name">Nome:</label>
<input type="text" id="name" name="name" required>
<button type="submit">Submit</button>
<button type="submit" formnovalidate formaction="/save-draft">Guardar Rascunho</button>
</form>
O botão “Submit” irá impor a validação, enquanto o botão “Guardar Rascunho” irá saltá-la. Esta abordagem dá-lhe controlo fino sem precisar de um atributo inválido.
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: