Como criar um datalista instantaneamente pesquisável
Listas suspensas são uma ótima maneira de fornecendo opções para um campo de entrada, particularmente quando a lista de opções disponíveis é longa. Um usuário pode escolher a opção que deseja digitando no campo, ou olhe através das opções que pode ser um jogo para o que eles estão procurando. Ser capaz de pesquisar as opções, no entanto, é a solução ideal.
Esse comportamento pode ser alcançado com o Elemento HTML que exibe sugestões de entrada para diferentes controles, como o
tag. Contudo
mostra apenas as opções disponíveis quando o usuário já digitou algo no campo de entrada.
Podemos tornar um campo de entrada mais utilizável se habilitarmos os usuários a acessar a lista completa de opções a qualquer momento durante o processo de entrada de dados.
Neste post, vamos ver como criar um lista suspensa que pode ser pesquisada a qualquer momento usando o e
Elementos HTML e um pouco de JavaScript.
1. Crie um datalista com opções
Primeiro, criamos um datalist para diferentes editores de texto. Certifique-se de que o valor do Lista
atributo do tag é o mesmo que a
identidade
do tag - é assim que nos ligamos uns aos outros.
2. Faça o Datalist Visible
Por padrão, o Elemento HTML é escondido. Nós só podemos ver isso, quando nós começar a digitar uma entrada no campo o datalista é anexado ao.
No entanto, há uma maneira de "forçar" o conteúdo do datalist (ou seja, todas as suas opções) para aparecer na página da web. Nós só precisamos dar-lhe um adequado exibição
valor da propriedade outro que não seja Nenhum
, por exemplo display: bloco;
.
datalist display: bloco;
As opções exibidas ainda não são selecionáveis neste momento, o navegador só processa as opções encontra dentro do datalista.
Como já mencionado, devido ao comportamento embutido do elemento, parte das opções já aparecem e são selecionáveis, mas somente quando o usuário começa a digitar uma string na qual o navegador pode encontrar uma opção correspondente.
Também precisamos encontrar um mecanismo para fazer todos opções (na captura de tela acima exibida sob o datalist dropdown) selecionável a qualquer outro ponto do processo de entrada de dados - quando os usuários querem dar uma olhada nas opções antes de digitarem alguma coisa, ou enquanto elas já colocaram algo no campo de entrada.
3. Traga o
Elemento HTML
Existem duas maneiras de permitir que os usuários veja e selecione todas as opções sempre que quiserem:
- Podemos adicionar um clique em manipulador de eventos para cada opção, e usá-lo para selecionar uma opção quando é clicado, ou também podemos transformar as opções em uma lista suspensa real, que, por padrão, é selecionável.
- Podemos embrulhe as opções do datalista com o
Elemento HTML.
Nós vamos escolher o segundo método, como é mais simples, e é permitido usá-lo como um mecanismo de fallback em navegadores que não suportam o elemento. Quando um navegador não pode processar e exibir o datalist, ele processa o
elemento com todas as suas opções em vez de.
Por padrão, o selecionar
elemento não aparece em navegadores que suportam datalist, ou seja, até que forçar o datalista a renderizar seu conteúdo com o display: bloco;
Regra de CSS.
Então, quando nós embrulhe as opções do exemplo acima (onde datalist tem visor: bloco
) com o Tag HTML, o código se parece abaixo:
Para veja todas as opções do selecionar
na lista suspensa, precisamos usar os atributos múltiplo
para mostrar mais de uma opção e Tamanho
para o número de opções que queremos mostrar.
4. Adicionar um botão de alternância
A lista suspensa completa deve aparecer só quando o usuário clica num botão de alternância ao lado do campo de entrada, enquanto o usuário digita o datalist de trabalho é mostrado. Vamos mudar o exibição
valor do datalista para Nenhum
, e também adicione um botão ao lado do campo de entrada, que alternará exibição
valor do datalist e, consequentemente, disparar a aparência de selecionar
.
datalist display: nenhum;
Também precisamos adicionar o seguinte botão acima do datalist no arquivo HTML:
Agora vamos ver o JavaScript. Primeiro, definimos o variáveis iniciais.
button = document.querySelector ('botão'); datalist = document.querySelector ('datalist'); select = document.querySelector ('select'); options = select.options;
Em seguida, precisamos adicionar um ouvinte de evento (toggle_ddl
) para o evento click do botão que irá alternar a aparência do datalista.
button.addEventListener ('clique', toggle_ddl);
Então, nós definimos o toggle_ddl ()
função. Para fazer isso, precisamos verifique o valor do datalist.style.display
propriedade. Se é uma string vazia, o datalist está oculto, então precisamos definir seu valor para quadra
, e também para mude o botão de uma seta apontando para baixo para uma seta apontando para cima.
function toggle_ddl () / * se DDL está oculto * / if (datalist.style.display === ") / * mostra DDL * / datalist.style.display = 'bloco'; this.textContent =" â² "; else hide_select (); function hide_select () / * ocultar DDL * / datalist.style.display ="; button.textContent = "â-¼";
o hide_select ()
função esconde o datalista definindo o datalist.style.display
propriedade de volta para uma string vazia, e alterando a seta do botão de volta para apontar para baixo.
Na configuração final, se os campos de entrada contiverem uma opção selecionada anteriormente e a lista suspensa também tiver sido acionada por um clique posterior, a opção selecionada anteriormente também será precisa ser mostrado como selecionado na lista suspensa.
Então, vamos adicionar o seguinte código destacado ao toggle_ddl ()
função:
function toggle_ddl () / * se DDL está oculto * / if (datalist.style.display === ") / * mostra DDL * / datalist.style.display = 'bloco'; this.textContent =" â² "var val = input.value; para (var i = 0; iTambém queremos ocultar a lista suspensa quando o usuário está digitando no campo de entrada (no momento em que o datalist em funcionamento será exibido).
/ * quando o usuário deseja digitar no campo de texto, esconda DDL * / input = document.querySelector ('input'); input.addEventListener ('focus', hide_select);5. Atualizar entrada quando uma opção é selecionada
Finalmente, vamos adicione um
mudança
manipulador de eventos aotag, de modo que quando o usuário seleciona uma opção na lista suspensa, seu valor será exibido dentro do
campo bem.
/ * quando o usuário seleciona uma opção do DDL, escreve no campo de texto * / select.addEventListener ('change', fill_input); function fill_input () input.value = opções [this.selectedIndex] .valor; hide_select ();Desvantagens
A principal desvantagem desta técnica é a ausência de uma maneira direta de estilizar
elemento com CSS (a aparência do
e
as tags variam em diferentes navegadores).
Além disso, no Firefox, o texto de entrada é comparado com opções que contém os caracteres de entrada, enquanto outros navegadores correspondem a começar com esses personagens. A especificação do W3C para datalist não especifica explicitamente como a correspondência deve ser feita.
Fora isso, este método é bom e funciona em todos os principais navegadores, Considerando que, nos navegadores em que pode não funcionar, os usuários ainda podem ver a lista suspensa, apenas as sugestões não serão exibidas.
Confira a demonstração final com um pouco de CSS abaixo: