Versão curta
Como posso fazer um ComboBox em HTML?
Versão longa
Como posso criar um menu suspenso editável com texto padrão em HTML?
O que quer dizer:
- uma caixa de texto que o usuário pode digitar
- ou eles podem clicar em (ou Alt+ Down) para exibir um menu suspenso
- e selecione algum texto predefinido
- enquanto o padrão da caixa de texto é algum padrão útil que não aparece (necessariamente) na lista
Algo como o controle padrão do Windows Combo Box ou o WinForms ComboBox :
Esforço de Pesquisa
Eu tentei o seguinte HTML:
<input id="edPhrase" list="phrases" value="Hello, world!">
<datalist id="phrases">
<option value="Good morning Vietnam">Good morning Vietnam</option>
<option value="Stay classy San Francisco">Stay classy San Francisco</option>
<option value="Cleaveland Rocks">Cleaveland Rocks</option>
<option value="I see dead people">I see dead people</option>
<option value="Guess who's drunk">Guess who's drunk</option>
</datalist>
mas nenhum menu suspenso aparece:
Se o usuário excluir o texto existente, o menu suspenso aparecerá:
Derrotando assim todo o propósito de um menu suspenso.
O que nos leva à pergunta:
Como posso fazer um ComboBox em HTML?
Exemplo Mínimo Reprodutível Completo (CRME)
Então você pode tentar mexer nele para que funcione em sua sandbox:
- jsFiddle: 7t1zgqo6
Não existe uma maneira nativa de HTML de conseguir isso, você precisará de algum Javascript personalizado para mostrar
<datalist>
todas as opções ou implementar o preenchimento automático em um<select>
Usar um
placeholder
no<input>
garantirá que todas as opções sejam mostradas dentro do<datalist>
, isso manterá o filtro enquanto digita funções, mas você não poderá 'selecionar' o espaço reservado.Existem alguns truques para
datalist
mostrar sempre todas as entradas disponíveis usando (por exemplo)blur()
eventos seplaceholder
não forem suficientes:Você precisa de JavaScript para excluir OR foco e selecionar e eles podem começar a digitar, o que abrirá o menu suspenso para o que eles digitam, assumindo que a letra digitada apareça na lista de dados
Como alternativa, pesquise widgets