0Pricing
HTML Academy · Aula

Eventos de redefinição de formulário e gerenciamento de estado

Trate a redefinição do formulário e acompanhe o estado dos campos durante as interações do usuário.

Eventos de redefinição de formulário e gerenciamento de estado é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 4 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.

O evento reset

Chamar form.reset() ou clicar em <button type="reset"> dispara um evento reset no formulário. Cada campo volta ao seu valor inicial (o atributo value ou vazio, no caso de campos de entrada novos). Escute o evento para reagir programaticamente à redefinição.

Valores padrão

O estado inicial usado pela redefinição é a propriedade defaultValue, defaultChecked ou defaultSelected — não o valor atual. Essas propriedades refletem os atributos value/checked/selected no HTML, definidos durante a análise e não alterados pela interação do usuário.

Atualizando valores padrão programaticamente

Para transformar o valor atual no novo "padrão" (fazendo com que redefinições posteriores voltem a ele), defina input.defaultValue = input.value. Isso é útil depois de um salvamento bem-sucedido: redefinições futuras voltarão ao estado salvo, em vez do formulário originalmente vazio.

form.addEventListener("submit", () => {
  // After save, treat current as defaults
  Array.from(form.elements).forEach((el) => {
    if ("defaultValue" in el) el.defaultValue = el.value;
  });
});

Escutando o evento reset

O evento reset é disparado antes que os valores voltem ao estado inicial. Para inspecionar o estado após a redefinição, adie a operação para a próxima microtarefa: form.addEventListener("reset", () => queueMicrotask(() => { ... use new values ... })). Esse é um detalhe comum e confuso do momento em que os eventos são disparados.

Impedindo a redefinição

Se você chamar e.preventDefault() em um manipulador do evento reset, a redefinição será cancelada e os valores permanecerão como estavam. Isso é útil para pedir uma confirmação de "tem certeza?" em formulários com dados importantes inseridos pelo usuário.

Acompanhando o estado com alterações pendentes

Compare os valores atuais com os valores padrão para saber se o formulário tem alterações pendentes: const dirty = Array.from(form.elements).some(el => el.value !== el.defaultValue). Use isso para ativar ou desativar um botão de salvamento ou exibir uma confirmação sobre alterações não salvas.

Confirmação antes de sair

Para avisar o usuário antes que ele saia de um formulário com alterações pendentes: window.addEventListener("beforeunload", (e) => { if (isDirty(form)) { e.preventDefault(); } }). Os navegadores exibem sua própria mensagem genérica de "sair do site?"; mensagens personalizadas não são mais compatíveis com os navegadores modernos.

Botões de redefinição geralmente proporcionam uma experiência ruim

Os botões de redefinição restauram todos os campos com um único clique acidental, muitas vezes com consequências graves. A maioria das interfaces modernas os omite completamente ou os esconde atrás de uma confirmação. Se precisar de uma redefinição, coloque o botão longe do botão de envio e considere oferecer uma desfazer em uma única etapa.

Persistência do estado do formulário

Em formulários longos, salve o estado em localStorage nos eventos de entrada e restaure-o ao carregar. Combine isso com uma solicitação "Restaurar rascunho?" para que os usuários não percam o trabalho ao fechar uma aba acidentalmente. Use também os manipuladores de redefinição e envio para limpar o estado salvo quando ele não for mais necessário.

form.addEventListener("input", () => {
  localStorage.setItem("form-draft", JSON.stringify(new FormData(form)));
});

Componentes personalizados e reset

Elementos de formulário personalizados (criados como componentes da web) participam da redefinição do formulário por meio de ElementInternals: no método formResetCallback, restaure o valor padrão. Isso é necessário quando o elemento personalizado encapsula um campo de entrada interno que precisa ser redefinido explicitamente.

Elementos personalizados associados a formulários

Declarar static formAssociated = true em uma classe de elemento personalizado e usar this.attachInternals() expõe formResetCallback, formStateRestoreCallback, formDisabledCallback e formAssociatedCallback para integrar o elemento ao ciclo de vida do formulário.

Verificação de conhecimento

Para qual valor cada campo retorna quando form.reset() é chamado?

Resumo

O evento reset é disparado quando form.reset() é executado; os campos retornam a defaultValue/defaultChecked/defaultSelected. Atualize os valores padrão depois de salvar para transformá-los no novo estado da redefinição. Acompanhe o estado com alterações pendentes comparando os valores atuais com os valores padrão, persista os dados em localStorage para formulários longos e use beforeunload para avisar sobre a navegação. Elementos personalizados integram-se por meio de formAssociated e formResetCallback.

Perguntas Frequentes

A aula “Eventos de redefinição de formulário e gerenciamento de estado” é grátis?

Sim — o texto completo de “Eventos de redefinição de formulário e gerenciamento de estado” é 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 “Eventos de redefinição de formulário e gerenciamento de estado”?

Trate a redefinição do formulário e acompanhe o estado dos campos durante as interações do usuário. 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 4 de 4.

Quanto tempo leva a aula “Eventos de redefinição de formulário e gerenciamento de estado”?

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