Datalist e JavaScript: Melhorando a Experiência do Usuário
HTML5-JavaScript
No desenvolvimento web, criar interfaces de usuário (UI) que sejam intuitivas e eficientes é uma prioridade. O elemento <datalist> do HTML5 proporciona uma forma simples de adicionar sugestões de autocompletar em campos de entrada (<input>). No entanto, suas funcionalidades básicas têm limitações que podem ser superadas com a ajuda do JavaScript. Neste artigo técnico, exploraremos como combinar <datalist> com JavaScript para criar uma experiência de autocompletar mais dinâmica e personalizada em formulários.

Introdução ao <datalist>

O elemento <datalist> permite associar uma lista de opções a um campo de entrada, oferecendo ao usuário uma lista de sugestões conforme ele digita. A sintaxe básica para criar um <datalist> é simples:
<label for="frutas">Escolha uma fruta:</label> <input list="frutas" id="frutaEscolhida" name="frutaEscolhida"> <datalist id="frutas"> <option value="Maçã"> <option value="Banana"> <option value="Laranja"> <option value="Manga"> <option value="Abacaxi"> </datalist>
No exemplo acima, ao digitar no campo de entrada, o usuário verá uma lista suspensa com as opções disponíveis, facilitando a seleção.

Limitações do <datalist> nativo

Apesar da sua utilidade, o <datalist> nativo apresenta algumas limitações que podem impactar a experiência do usuário:
  • Falta de Filtragem Dinâmica: O <datalist> não filtra as opções com base no texto digitado pelo usuário, exibindo todas as opções independentemente do que foi inserido.
  • Incapacidade de Carregar Dados Dinamicamente: O <datalist> não suporta a adição dinâmica de opções após o carregamento da página, limitando sua aplicação em cenários onde as opções são obtidas de uma API ou banco de dados.
Essas limitações tornam o <datalist> pouco adequado para formulários complexos ou que demandam uma personalização maior.

Filtragem dinâmica com JavaScript

Uma forma de aprimorar o <datalist> é implementando a filtragem dinâmica das opções à medida que o usuário digita. Com JavaScript, podemos monitorar as entradas do usuário e ajustar as opções do <datalist> em tempo real:
<label for="cidade">Escolha uma cidade:</label> <input list="cidades" id="cidadeEscolhida" name="cidadeEscolhida"> <datalist id="cidades"></datalist> <script> const cidades = ['São Paulo', 'Rio de Janeiro', 'Belo Horizonte', 'Porto Alegre', 'Curitiba']; const datalist = document.getElementById('cidades'); const input = document.getElementById('cidadeEscolhida'); function atualizarDatalist() { const valorDigitado = input.value.toLowerCase(); datalist.innerHTML = ''; const cidadesFiltradas = cidades.filter(cidade => cidade.toLowerCase().includes(valorDigitado)); cidadesFiltradas.forEach(cidade => { const option = document.createElement('option'); option.value = cidade; datalist.appendChild(option); }); } input.addEventListener('input', atualizarDatalist); </script>
No exemplo acima, à medida que o usuário digita, a lista de cidades é filtrada para mostrar apenas as que contêm o texto inserido. Essa abordagem melhora a relevância das sugestões e proporciona uma experiência de usuário mais fluida.

Carregando opções dinamicamente de uma API

Outra melhoria significativa é a capacidade de carregar as opções do <datalist> dinamicamente a partir de uma API. Isso é particularmente útil em aplicações que precisam lidar com grandes volumes de dados ou com dados que mudam frequentemente:
<label for="pais">Escolha um país:</label> <input list="paises" id="paisEscolhido" name="paisEscolhido"> <datalist id="paises"></datalist> <script> async function carregarPaises() { const resposta = await fetch('https://restcountries.com/v3.1/all'); const dados = await resposta.json(); const datalist = document.getElementById('paises'); dados.forEach(pais => { const option = document.createElement('option'); option.value = pais.name.common; datalist.appendChild(option); }); } carregarPaises(); </script>
Neste exemplo, as opções de países são carregadas de uma API REST que retorna uma lista de países. Assim, o <datalist> é preenchido dinamicamente, permitindo que o formulário seja sempre atualizado com os dados mais recentes.

Melhorando a acessibilidade e usabilidade

Ao aprimorar o <datalist> com JavaScript, é importante garantir que a interface permaneça acessível a todos os usuários. Algumas boas práticas incluem:
  • Uso Adequado de Labels: Sempre associe a tag <label> ao campo de entrada para melhorar a acessibilidade, especialmente para usuários de leitores de tela.
  • Mensagens de Feedback: Forneça feedback ao usuário, como mensagens que indicam que nenhuma opção foi encontrada ou que os dados estão sendo carregados.
Exemplo:
<label for="linguagem">Escolha uma linguagem de programação:</label> <input list="linguagens" id="linguagemEscolhida" name="linguagemEscolhida"> <datalist id="linguagens"></datalist> <p id="feedback" aria-live="polite"></p> <script> const linguagens = ['JavaScript', 'Python', 'Java', 'C#', 'Ruby', 'Go', 'Swift']; const datalist = document.getElementById('linguagens'); const input = document.getElementById('linguagemEscolhida'); const feedback = document.getElementById('feedback'); function atualizarDatalist() { const valorDigitado = input.value.toLowerCase(); datalist.innerHTML = ''; const linguagensFiltradas = linguagens.filter(linguagem => linguagem.toLowerCase().includes(valorDigitado)); if (linguagensFiltradas.length === 0) { feedback.textContent = 'Nenhuma linguagem encontrada.'; } else { feedback.textContent = ''; linguagensFiltradas.forEach(linguagem => { const option = document.createElement('option'); option.value = linguagem; datalist.appendChild(option); }); } } input.addEventListener('input', atualizarDatalist); </script>
Este exemplo proporciona uma experiência de usuário mais rica, informando quando nenhuma opção correspondente foi encontrada.
 
A combinação de <datalist> com JavaScript oferece uma maneira poderosa de criar formulários mais interativos e adaptáveis. Ao implementar filtragem dinâmica e carregamento de dados via API, você pode superar as limitações do <datalist> nativo, melhorando a experiência do usuário. Além disso, garantir que essas funcionalidades sejam acessíveis e usáveis para todos os públicos é crucial para o sucesso de sua aplicação. Experimente essas técnicas em seus próximos projetos e veja como elas podem transformar a interação do usuário com seus formulários.

Aprenda programação do zero e DE GRAÇA

No Discover você vai descomplicar a programação, aprender a criar seu primeiro site com a mão na massa e iniciar sua transição de carreira.

COMECE A ESTUDAR AGORA