Como construir um assistente de formulário de várias etapas com JavaScript

Preencher formulários longos pode ser tedioso! Como designers, podemos aprimorar a experiência focando em componentes individuais em um formulário de várias etapas. Esse padrão de design promove uma maneira mais amigável de capturar dados do usuário e, às vezes, solicita muito deles.

O objetivo com nosso formulário de várias etapas será reduzir o fardo de ter um formulário mais extenso para capturar dados do usuário, garantindo ao mesmo tempo que os dados apropriados sejam enviados.

1. Comece com o HTML

Nossa marcação HTML efetivamente nos dará um layout baseado em guias. Teremos três botões, um formulário e alguns indicadores de status para que o usuário tenha certeza em qual etapa está.

Vou começar com três perguntas, mas você pode estender isso para incluir quantas você preferir. O código JavaScript, no final, é dinâmico, o que significa que você pode facilmente adicionar e remover perguntas adicionais.

2. Estilizando o formulário com CSS

Sem CSS, a abordagem de várias etapas não transmite como esperávamos. Aqui está o CSS que usei para estilizar o HTML.

3. Para o JavaScript

Vamos começar declarando algumas variáveis. Os três primeiros terão como alvo os botões que mencionei anteriormente. Em seguida, direcionaremos os painéis de guias e guias como uma coleção de elementos conhecidos como NodeList em JavaScript. Essa é uma maneira elegante de chamá-lo de Array.

eu criei um isEmpty função para ajudar a determinar rapidamente se um valor de string de entrada de formulário está vazio ou não.

Por fim, há o currentStep variável que mudará conforme o Próximo e Anterior botões são clicados.

Botões Próximo e Anterior

Nosso Próximo e Anterior botões será como o usuário navega no questionário. Vamos alavancar o currentStep variável para renderizar a etapa apropriada e a guia ativa dinamicamente. Como ele retorna um valor numérico, podemos direcionar o NodeList dinamicamente.

o Próximo botão, uma vez clicado, sinalizará o HTML/CSS para ficar ocupado, ocultando a guia ativa e o painel de guias e mostrando a seguinte pergunta no assistente.

Vamos estender esta ação para chamar mais algumas funções. Uma função será responsável por atualizar os indicadores de status e a outra validará a resposta do usuário inserida antes que ele possa continuar.

Atualizando o status dinamicamente

Para atualizar o status, precisamos realizar uma operação condicional que verifica o estado do currentStep variável.

Usando o tabTargets variável, podemos determinar quantas guias existem com o .length() método. o length() O método retorna dinamicamente o número de guias no HTML.

Abaixo, adicionei comentários no código para melhor denotar o que acontece após cada instrução condicional.

Mostraremos e ocultaremos dinamicamente os controles relativos ao início, meio e fim do assistente de formulário.

Validando a entrada do usuário

Para que um questionário/quiz/formulário de várias etapas funcione corretamente, queremos garantir que os dados sejam enviados adequadamente.

Este tutorial apenas arranha a superfície do que você poderia valide no front-end, mas por enquanto, estamos apenas verificando se existe um valor para cada pergunta.

Para estender essa funcionalidade, você pode verificar critérios adicionais, como o tamanho de uma resposta, se alguma entrada de spam/código pode prejudicar o site e muito mais. Eu também aconselharia adicionar validação do lado do servidor para que nenhum código prejudicial entre em nenhum banco de dados.

Eu adicionei duas funções que funcionam juntas para ajudar a validar que um valor está presente para cada pergunta.

Primeiro, validaremos quando a função for chamada inicialmente e, em seguida, adicionaremos algumas funções de ouvinte de eventos para definir permissões de botão dinamicamente à medida que você interage com o formulário.

Isto irá desabilitar ou habilitar o Próximo botão e Enviar botões relativos ao currentStep valor da variável e veja se há texto presente dentro de cada campo do formulário.

Adicionamos as duas funções ao original nextButton função e chamá-los após cada clique.

Nosso botão anterior se assemelha à lógica de botão a seguir com matemática ligeiramente diferente.

Não precisamos chamar o validateEntry() função no botão anterior clique, pois é assumido que já haveria um valor no campo do formulário.

Juntando tudo

Abaixo está o resultado final (confira a aba JS para ver todo o código junto). O código JavaScript poderia ser mais otimizado para reutilização. Ainda assim, é contexto suficiente para ajudá-lo a aprender a construir um formulário simples de navegar, e facilita a vida de um usuário quando se trata de focar em uma pergunta específica e respondê-la de forma simples.

Deixe uma resposta