Lista em HTML com a opção para escrever um item

tinha a impressão de que podias escrever numa lista, para além de seleccionares os valores que já estão na lista. No entanto, não consigo encontrar informações sobre como fazer isto. Existe uma propriedade que eu preciso adicionar a ela para permitir a digitação de texto?

Author: birdus, 2013-01-31

10 answers

Antes de datalist (Ver nota abaixo) forneceria um elemento adicional input para as pessoas escreverem na sua própria opção.

<select name="example">
    <option value="A">A</option>
    <option value="B">A</option>
    <option value="-">Other</option>
</select>

<input type="text" name="other">

Este mecanismo funciona em todos os navegadores e não necessita de JavaScript .

Você poderia usar um pouco de JavaScript para ser inteligente sobre apenas mostrar o input se a opção" Outro " foi selecionada.

Elemento Datalist

O elemento datalist destina-se a fornecer um mecanismo melhor para este conceito. O que é importante é que não tem apoio em Safari, iOS Safari ou Opera Mini. A implementação do Internet Explorer também tem alguns problemas. Esta informação ficará desactualizada, por isso verifique Se posso usar para ver o suporte datalist actual para obter informações mais recentes.

<input type="text" name="example" list="exampleList">
<datalist id="exampleList">
    <option value="A">
    <option value="B">
</datalist>
 70
Author: user75525, 2015-07-11 17:52:19

Em HTML, fazes isto ao contrário: Você define uma entrada de texto e anexar um datalist a ele. (note the list attribute of the input).

<input type="text" list="browsers" />

<datalist id="browsers">
    <option value="Internet Explorer">
    <option value="Firefox">
    <option value="Chrome">
    <option value="Opera">
    <option value="Safari">
</datalist>
 47
Author: Kristóf Szalay, 2018-07-13 01:00:07

Este link pode ajudá-lo: http://www.scriptol.com/html5/combobox.php

Tem dois exemplos. Um em html4 e outro em html5

HTML5

<input type="text" list="browsers"/>
 <datalist id="browsers">
    <option>Google</option>
    <option>IE9</option>
 </datalist>

HTML4

 <input type="text" id="theinput" name="theinput" />
 <select name="thelist" onChange="combo(this, 'theinput')">
   <option>one</option>
   <option>two</option>
   <option>three</option>
 </select>
 function combo(thelist, theinput) {
     theinput = document.getElementById(theinput);
     var idx = thelist.selectedIndex;
     var content = thelist.options[idx].innerHTML;
     theinput.value = content;
 }
 19
Author: Celso Soares, 2018-06-29 06:40:09

O exemplo dojo aqui não funciona quando aplicado ao código existente na maioria dos casos. Por isso, tive de encontrar um alternativo, encontrado aqui - hxxp://technologymantrablog.com/how-to-create-a-combo-box-with-text-input-jquery-autocomplete/ (agora aponta para um site de spam ou pior)

Archive.org (não muito útil)

Aqui está o jsfiddle - https://jsfiddle.net/ze7fgby7/
 6
Author: Yohan Weerasinghe, 2017-11-15 19:03:16
Bem, estamos em 2016 e ainda não há uma maneira fácil de fazer uma combinação ... claro que temos datalist, mas sem o suporte safari/ios não é realmente utilizável. Pelo menos temos ES6 .. abaixo está uma tentativa de uma classe combo que envolve um div ou span, transformando-o em uma combinação, colocando uma caixa de entrada em cima de selecionar e vincular os eventos relevantes.

Ver o código em: https://github.com/kofifus/Combo

(o código baseia-se no padrão de classes de https://github.com/kofifus/New)

Criar uma combinação é fácil ! passa um div para o construtor.

let mycombo=Combo.New(document.getElementById('myCombo'));
mycombo.options(['first', 'second', 'third']);

mycombo.onchange=function(e, combo) {
  let val=combo.value;
  // let val=this.value; // same as above
  alert(val);
 }
<script src="https://rawgit.com/kofifus/New/master/new.min.js"></script>
<script src="https://rawgit.com/kofifus/Combo/master/combo.min.js"></script>

<div id="myCombo" style="width:100px;height:20px;"></div>
 4
Author: kofifus, 2016-10-06 22:37:20
Este é muito menor, não requer jquery e funciona melhor em safari. https://github.com/Fyrd/purejs-datalist-polyfill/

Verifique os problemas para a modificação para adicionar um downarrow. https://github.com/Fyrd/purejs-datalist-polyfill/issues

 2
Author: tdolphin, 2017-01-11 00:29:53

A minha solução é muito simples, parece-se exactamente com um combobox nativo editável e ainda funciona mesmo no IE6 (algumas respostas aqui requerem um monte de código ou bibliotecas externas e o resultado é assim, por exemplo, o texto no textbox vai por trás do ícone da parte do combobox ou não se parece com um combobox editável de todo).

O ponto é clipar a combobox apenas o ícone da lista para ficar visível por cima da caixa de texto. E a caixa de texto é larga um pouco por baixo da parte do combobox, então você não vê seu final direito - visualmente continua com a combobox: https://jsfiddle.net/dLsx0c5y/2/

select#programmoduleselect
{
    clip: rect(auto auto auto 331px);
    width: 351px;
    height: 23px;
    z-index: 101; 
    position: absolute;
}

input#programmodule
{
    width: 328px;
    height: 17px;
}

<table><tr>
<th>Programm / Modul:</th>
<td>
    <select id="programmoduleselect"
        onchange="var textbox = document.getElementById('programmodule'); textbox.value = (this.selectedIndex == -1 ? '' : this.options[this.selectedIndex].value); textbox.select(); fireEvent2(textbox, 'change');"
        onclick="this.selectedIndex = -1;">
        <option value=RFEM>RFEM</option>
        <option value=RSTAB>RSTAB</option>
        <option value=STAHL>STAHL</option>
        <option value=BETON>BETON</option>
        <option value=BGDK>BGDK</option>
    </select>
    <input name="programmodule" id="programmodule" value="" autocomplete="off"
        onkeypress="if (event.keyCode == 13) return false;" />
</td>
</tr></table>

(usado originalmente, por exemplo, aqui, mas não envie o formulário: old.dlubal.com/WishedFeatures.aspx )

Editar: os estilos precisam de ser um pouco diferentes para os macOS: O Ch está bem, para que o FF aumente a altura do combobox, o Safari e o Opera ignorem a altura do combobox, de modo a aumentar o seu tamanho de letra (tem um limite superior, de modo a diminuir um pouco a altura do textbox): https://i.stack.imgur.com/efQ9i.png

 2
Author: Ladislav Zima, 2017-04-07 22:48:52

Dado que a marca HTML datalist ainda não é totalmente suportada, uma abordagem alternativa que eu usei é a caixa de ferramentas Dojo Toolkit . Era mais fácil implementar e documentar melhor do que outras opções que explorei. Também funciona bem com os quadros existentes. No meu caso, adicionei este combobox a um site existente que é baseado no Codeigniter e Bootstrap sem problemas que você só precisa ter certeza de aplicar o tema Dojo (por exemplo, classe="claro") para o elemento pai da combo em vez da etiqueta do corpo para evitar conflitos de estilo.

Primeiro, incluir o CSS para um dos temas do Dojo (como 'Claro'). É importante que o arquivo CSS seja incluído antes dos arquivos JS abaixo.

<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/dojo/1.9.6/dijit/themes/claro/claro.css" />

A seguir, inclui o jQuery e o Toolkit do Dojo via CDN

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.10.3/dojo/dojo.js"></script>

Em seguida, você pode apenas seguir o código de exemplo dojo ou usar a amostra abaixo para obter uma lista de trabalho.

<body>
    <!-- Dojo Dijit ComboBox with 'Claro' theme -->
    <div class="claro"><input id="item_name_1" class=""/></div>

    <script type="text/javascript">
        $(document).ready(function () {
            //In this example, dataStore is simply an array of JSON-encoded id/name pairs
            dataStore = [{"id":"43","name":"Domain Name Renewal"},{"id":"42","name":"Hosting Renewal"}];

            require(
                [ "dojo/store/Memory", "dijit/form/ComboBox", "dojo/domReady!"], 
                function (Memory, ComboBox) {
                    var stateStore = new Memory({
                        data: dataStore
                    });

                    var combo = new ComboBox({
                        id: "item_name_1",
                        name: "desc_1",
                        store: stateStore,
                        searchAttr: "name"},                        
                        "item_name_1"
                        ).startup();

                });

        });

    </script>
</body>
 1
Author: Flareman2020, 2015-04-14 07:32:47

Olha para a ComboBox ou Combo neste site: http://www.jeasyui.com/documentation/index.php#

 -1
Author: kmb, 2013-01-30 22:09:50
    <html>
<head>
    <title></title>
    <script src="jquery-3.1.0.js"></script>
    <script>
        $(function () {
            $('#selectnumber').change(function(){
                alert('.val() = ' + $('#selectnumber').val() + '  AND  html() = ' + $('#selectnumber option:selected').html() + '  AND .text() = ' + $('#selectnumber option:selected').text());
            })
        });
    </script>
</head>
<body>
       <div>
        <select id="selectnumber">
            <option value="1">one</option>
            <option value="2">two</option>
            <option value="3">three</option>
            <option value="4">four</option>
        </select>

    </div>
   </body>
</html>

Click to see OutPut Screen

Obrigado...:)
 -2
Author: Bhanu pratap, 2016-08-09 17:18:14