0Pricing
HTML Academy · Aula

reportValidity e setCustomValidity

Acione a interface de validação do navegador e defina mensagens de erro personalizadas.

reportValidity e setCustomValidity é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.

Duas APIs para a experiência nativa

A API de validação de restrições expõe dois métodos que controlam a interface de validação integrada do navegador: reportValidity (exibe a dica de ferramenta) e setCustomValidity (fornece uma mensagem de erro personalizada). Juntos, eles permitem personalizar as mensagens e manter a apresentação nativa.

reportValidity versus checkValidity

checkValidity() retorna true/false silenciosamente, sem efeitos visuais. reportValidity() faz a mesma verificação, mas também focaliza o primeiro campo inválido e exibe a dica de validação do navegador. Escolha reportValidity quando quiser uma experiência nativa sem trabalho adicional.

document.forms.signup.addEventListener("submit", (e) => {
  if (!e.target.reportValidity()) {
    e.preventDefault();
    // browser already focused first invalid field and showed tooltip
  }
});

Validação programática

Em assistentes com várias etapas, valide os campos de cada etapa antes de avançar: if (step.reportValidity()) { next(); }. O navegador cuida da exibição do erro e focaliza o campo que precisa de atenção, evitando que você tenha de reimplementar o gerenciamento do foco.

setCustomValidity substitui as mensagens

As mensagens padrão ("Preencha este campo") podem não corresponder ao seu tom. input.setCustomValidity("Username is required") substitui a mensagem padrão pelo seu texto. O campo de entrada será tratado como inválido até que você limpe a mensagem.

Limpando mensagens personalizadas

input.setCustomValidity("") remove a mensagem personalizada e reativa a validação normal. Chame-o sempre que fizer uma nova validação; caso contrário, mensagens personalizadas antigas continuarão presentes mesmo depois que o usuário corrigir o problema.

input.addEventListener("input", () => {
  if (input.value.length < 3) {
    input.setCustomValidity("Must be at least 3 characters");
  } else {
    input.setCustomValidity("");
  }
});

Validação assíncrona

Para verificações no servidor (exclusividade do nome de usuário e validade do cupom), use setCustomValidity após a resposta assíncrona: const ok = await checkUsername(value); input.setCustomValidity(ok ? "" : "Already taken");. O navegador identifica imediatamente o novo estado de validade.

Combinando com uma interface de erro personalizada

Para usar sua própria exibição de erros e ainda obter o acompanhamento da validade, escute o evento invalid e chame e.preventDefault() para suprimir a dica de ferramenta nativa: input.addEventListener("invalid", (e) => { e.preventDefault(); showError(input, input.validationMessage); }).

Várias restrições personalizadas

setCustomValidity aceita apenas uma mensagem personalizada por vez. Para impor várias regras, verifique cada uma e chame setCustomValidity com a mensagem mais relevante, seguindo uma ordem de prioridade. A primeira regra que falhar será exibida.

Não duplique as restrições integradas

Se você definir uma mensagem personalizada para um campo obrigatório vazio, sua mensagem e a mensagem padrão poderão entrar em conflito. Escolha uma abordagem por campo: desative a restrição integrada (use type="text" em vez de type="email" e valide por meio de setCustomValidity) ou confie totalmente na validação integrada.

Validação personalizada no nível do formulário

Para validação entre campos (como a confirmação de senha), aplique setCustomValidity ao campo relacionado: confirmInput.setCustomValidity(confirmInput.value === passInput.value ? "" : "Passwords do not match"). O formulário permanecerá inválido até que os dois valores coincidam.

Internacionalização

As mensagens integradas são localizadas pelo navegador com base no idioma do usuário. Você deve fornecer no idioma correto as mensagens personalizadas definidas por setCustomValidity — leia navigator.language ou seu próprio estado de i18n e forneça a tradução correspondente.

Testes

Abra o DevTools e experimente todos os caminhos inválidos: envio vazio, entrada incompleta, formato incompatível e falha assíncrona. Verifique se a mensagem correta é exibida, se a correção do problema a remove e se o envio de um formulário válido prossegue. Casos-limite, como colar um formato inválido ou usar o preenchimento automático do navegador, merecem testes específicos.

Verificação de conhecimento

Depois de chamar input.setCustomValidity("Already taken"), como informar ao navegador que o campo de entrada voltou a ser válido?

Resumo

reportValidity aciona a interface de validação integrada do navegador (foco e dica de ferramenta), sendo ideal para verificações programáticas. setCustomValidity substitui as mensagens padrão pelo seu texto — limpe-a com uma string vazia quando o valor voltar a ser válido. Escute o evento invalid com preventDefault para exibir erros de forma totalmente personalizada. Use-o para validação entre campos, verificações assíncronas e mensagens personalizadas localizadas.

Perguntas Frequentes

A aula “reportValidity e setCustomValidity” é grátis?

Sim — o texto completo de “reportValidity e setCustomValidity” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.

O que vou aprender em “reportValidity e setCustomValidity”?

Acione a interface de validação do navegador e defina mensagens de erro personalizadas. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar HTML Academy?

Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “reportValidity e setCustomValidity”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de HTML Academy?

Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. A API FormData
  2. A API de validação de restrições
  3. reportValidity e setCustomValidity
  4. Eventos de redefinição de formulário e gerenciamento de estado
← Voltar para HTML Academy