TL; DR: Não se preocupa com navegadores antigos? Use form.reportValidity()
.
Precisa de suporte para navegador legado? Leia.
Na verdade, é possível acionar a validação manualmente.
Vou usar JavaScript simples em minha resposta para melhorar a capacidade de reutilização, não é necessário jQuery.
Suponha o seguinte formulário HTML:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
E vamos pegar nossos elementos de IU em JavaScript:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Não precisa de suporte para navegadores legados como o Internet Explorer? Isto é para você.
Todos os navegadores modernos suportam o reportValidity()
método em form
elementos.
triggerButton.onclick = function () {
form.reportValidity()
}
É isso, terminamos. Além disso, aqui está um CodePen simples usando essa abordagem.
Abordagem para navegadores mais antigos
Abaixo está uma explicação detalhada de como reportValidity()
pode ser emulado em navegadores mais antigos.
No entanto, você não precisa copiar e colar esses blocos de código em seu projeto - há um ponyfill / polyfill prontamente disponível para você.
Onde reportValidity()
não é compatível, precisamos enganar um pouco o navegador. Então o que vamos fazer?
- Verifique a validade do formulário ligando para
form.checkValidity()
. Isso nos dirá se o formulário é válido, mas não mostra a IU de validação.
- Se o formulário for inválido, criamos um botão de envio temporário e acionamos um clique nele. Uma vez que o formulário não é válido, nós sabemos que não vai realmente apresentar, no entanto, ele irá mostrar dicas de validação para o usuário. Removeremos o botão de envio temporário imediatamente, para que ele nunca fique visível para o usuário.
- Se o formulário for válido, não precisamos interferir em nada e deixar o usuário prosseguir.
Em código:
triggerButton.onclick = function () {
// Form is invalid!
if (!form.checkValidity()) {
// Create the temporary button, click and remove it
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
// Form is valid, let the user proceed or do whatever we need to
}
}
Este código funcionará em praticamente qualquer navegador comum (eu testei com sucesso até o IE11).
Aqui está um exemplo de CodePen funcional.