Do ponto de vista técnico, são completamente diferentes. <datalist>
é um contêiner abstrato de opções para outros elementos. No seu caso, você o usou, <input type="text"
mas também pode usá-lo com intervalos, cores, datas etc. http://demo.agektmr.com/datalist/
Se você usá-lo com entrada de texto, como um tipo de preenchimento automático, a questão é: É melhor usar uma entrada de texto de formato livre ou uma lista predeterminada de opções? Nesse caso, acho que a resposta é um pouco mais óbvia.
Se focarmos no uso de <datalist>
como uma lista de opções para um campo de texto, aqui estão algumas diferenças específicas entre isso e uma caixa de seleção:
- Uma
<datalist>
caixa de texto alimentada possui uma única sequência para o rótulo de exibição e o envio. Uma caixa de seleção pode ter um valor de envio diferente e um rótulo de exibição <option value='ie'>Internet Explorer</option>
.
- Uma
<datalist>
caixa de texto alimentada não suporta a <optgroup>
marca para organizar a exibição.
- Você não pode restringir um usuário à lista de opções da
<datalist>
mesma forma que pode com a <select>
.
- O evento onchange funciona de maneira diferente. Em um
<select>
elemento, o evento onchange é acionado imediatamente após a alteração, enquanto que com <input type="text"
o evento é acionado após o elemento perder o foco ou o usuário pressionar Enter.
<datalist>
tem um suporte realmente irregular nos navegadores. A maneira de mostrar todas as opções disponíveis é inconsistente e as coisas só pioram a partir daí.
O último ponto é realmente o grande na minha opinião. Como você precisará ter um fallback de preenchimento automático mais universal, quase não há razão para enfrentar o problema de configurar a <datalist>
. Além disso, qualquer plug-in de preenchimento automático decente permitirá maneiras de estilizar a exibição de suas opções, o que <datalist>
não funciona. Se os elementos <datalist>
aceitos <li>
que você pudesse manipular como quisesse, teria sido realmente ótimo! Mas não.
Também na medida em que posso dizer, a <datalist>
pesquisa é uma correspondência exata desde o início da string. Então, se você tivesse <option value="internet explorer">
e pesquisou 'explorer', não obteria resultados. A maioria dos plugins de preenchimento automático pesquisará em qualquer lugar do texto.
Usei apenas <datalist>
como um auxiliar de conveniência rápido e preguiçoso para algumas páginas internas nas quais sei com 100% de certeza que os usuários têm o Chrome ou Firefox mais recente e não tentam enviar valores falsos. Para qualquer outro caso, é difícil recomendar o uso <datalist>
devido ao suporte insuficiente ao navegador.