A validação de formulários sempre foi minha parte menos favorita do desenvolvimento da Web. O senhor precisa duplicar a validação nos lados do cliente e do servidor, lidar com muitos eventos e se preocupar com o estilo do elemento do formulário. Para ajudar na validação de formulários, a especificação HTML adicionou alguns novos atributos de formulário, como required e pattern para atuar como uma validação muito básica. No entanto, o senhor sabia que pode controlar a validação nativa de formulários usando JavaScript?

validity

Cada elemento do formulário (input, por exemplo) fornece um validity que representa uma propriedade ValidityState. ValidityState é mais ou menos assim:

// input.validity
{
  badInput: false,
  customError: true,
  patternMismatch: false,
  rangeOverflow: false,
  rangeUnderflow: false,
  stepMismatch: false,
  tooLong: false,
  tooShort: false,
  typeMismatch: false,
  valid: false,
  valueMissing: true
}

Cada propriedade no ValidityState pode corresponder aproximadamente a um problema de validação específico: valueMissing corresponderia ao required , tooLong e tooShort correspondência minLength e maxLength, etc.

Verificação da validade e definição de uma mensagem de validação personalizada

Cada campo de formulário fornece uma mensagem de erro padrão para cada tipo de erro, mas é provável que seja melhor definir uma mensagem mais personalizada para o seu aplicativo. O senhor pode usar o campo de formulário setCustomValidity do campo de formulário para criar sua própria mensagem:

// Check validity
input.checkValidity();

if(input.validity.valueMissing) {
  input.setCustomValidity('This is required, bro!  How did you forget?');
} else {
  // Clear any previous error
  input.setCustomValidity('');
}

Basta definir a mensagem por setCustomValidity não mostrar a mensagem, no entanto.

reportValidity

Para que o erro seja exibido ao usuário, use o elemento de formulário reportValidity do elemento de formulário:

// Show the error!
input.reportValidity();

A dica de ferramenta de erro será imediatamente exibida na tela. O exemplo a seguir exibe o erro a cada cinco segundos:

Veja a caneta Sem título por David Walsh (@darkwing) em CodePen.

Ter ganchos no sistema de validação de formulário nativo é muito valioso e eu gostaria que os desenvolvedores o utilizassem mais. Cada site tem seu próprio estilo de validação do lado do cliente, manipulação de eventos etc. Vamos usar o que nos foi fornecido!