Código de JavaScript - Autocompletar desde un array de valores con JavaScript

Imágen de perfil
Val: 1.807
Plata
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Autocompletar desde un array de valores con JavaScriptgráfica de visualizaciones


JavaScript

Publicado el 22 de Septiembre del 2019 por Xavi (548 códigos)
3.973 visualizaciones desde el 22 de Septiembre del 2019
Este código muestra los países a medida que se va escribiendo en un cuadro de texto, permitiendo seleccionar cualquier país del listado que se va mostrando a medida que se va escribiendo.
Cada vez que se selecciona un país, se crea una nueva caja con el país seleccionado, permitiendo eliminarlo de la selección.

autocompletar-1

autocompletar-2

autocompletar-3

autocompletar-4


Es el mismo código que realice hace tiempo con jquery pasado a javascript
La versión en jquery: https://www.lawebdelprogramador.com/codigo/JQuery/3694-Autocompletar-desde-un-array-de-valores-con-JQuery.html

Versión 1.0
estrellaestrellaestrellaestrellaestrella(2)

Publicado el 22 de Septiembre del 2019gráfica de visualizaciones de la versión: Versión 1.0
3.974 visualizaciones desde el 22 de Septiembre del 2019
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="utf-8">
    <title>Autocompletar desde un array de valores</title>
 
    <style>
    body {
        font-family:Arial;
        font-size:14px;
    }
 
    .autocompletar input {
        padding:5px;
        font-size: 14px;
    }
    .autocompletar ul {
        background-color:white;
        border:1px solid #ccc;
        display:none;
        margin:0px;
        padding:0px;
        position:absolute;
        width:300px;
    }
    .autocompletar ul li {
        border-bottom:1px solid #ccc;
        list-style:none;
        padding:3px;
        cursor:pointer;
    }
    .autocompletar ul li:last-child {
        border-bottom:none;
    }
    .autocompletar ul li:hover {
        background-color:#ccc;
    }
    #tags {
        margin-top:20px;
    }
    #tags>div {
        background-color:#f0f0f0;
        border:1px solid #ccc;
        display:inline-block;
        margin-right:5px;
        padding:3px 5px;
    }
    #tags>div>span {
        background-color:#ccc;
        border-radius:10px;
        cursor:pointer;
        display:inline-block;
        font-size:12px;
        margin-left:7px;
        padding:3px;
        text-align:center;
        width:15px;
    }
    #tags>div>span::after {
        content:"X";
    }
    </style>
</head>
 
<body>
 
    <div class="autocompletar">
        <input type="text" value="">
        <ul></ul>
    </div>
 
    <div id="tags"></div>
</body>
</html>
 
<script>
const arrayValores=Array("Afghanistan", "Albania", "Argelia", "Alemania", "American Samoa", "Andorra", "Angola", "Anguilla", "Antartida", "Antigua y Barbuda", "Argentina", "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", "Bosnia-Herzegovina", "Botswana", "Bouvet Island", "Brasil", "Brit Ind Ocean Territory", "Brunei Darussalm", "Bulgaria", "Burkina Faso", "Burma", "Burundi", "Cambodia", "Cameroon", "Canada", "Canary Islands", "Cape Verde", "Caymen Islands", "Central African Rep", "Chad", "Chile", "China", "Christmas Islands", "Cocos Islands", "Colombia", "Comoros", "Congo", "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Chipre", "Dem Rep. of Korea", "Dinamarca", "Djibouti", "Dominica", "East Timor", "Ecuador", "Egipto", "El Salvador", "Eritrea", "España", "Estados Unidos de America", "Estonia", "Etiopia", "Falkland Islands", "Faroe Islands", "Fiji", "Finland", "Francia", "Guiana Francesa", "Polynesia Francesa", "French So. Territories", "Gabon", "Gambia", "Georgia", "Ghana", "Gibraltar", "Guinea Equatorial", "Grecia", "Greenland", "Grenada", "Guadalupe", "Guatemala", "Guinea", "Guinea Bissau", "Guyana", "Haiti", "Heard, McDonald Island", "Honduras", "Hong Kong", "Hungary", "Iceland", "India", "Indonesia", "Inglaterra", "Iran", "Iraq", "Ireland", "Islas Filipinas", "Israel", "Italia", "Ivory Coast", "Jamaica", "Japon", "Jordan", "Kazakhistan", "Kenia", "Kiribati", "Korea del Norte", "Kuwait", "Kyrqyzstan", "Laos", "Lativa", "Libano", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macau", "Madagascar", "Malawi", "Malaysia", "Maldivas", "Mali", "Malta", "Mariana Islands", "Marruecos", "Marshall Islands", "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova", "Monaco", "Mongolia", "Montserrat", "Mozambique", "Myanmar", "Nambia", "Nauru", "Nepal", "Netherland Antilles", "Netherlands", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Niue Island", "Norfolk Island", "Northern Mariana Island", "Norway", "OCE", "Oman", "Pacific Islands", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Pitcairn", "Poland", "Portugal", "Puerto Rico", "Qatar", "Reino Unido", "Republica de Corea", "Republica Dominicana", "Reunion", "Romania", "Russian Federation", "Rwanda", "South Georgia Sandwich", "Saint Pierre Miguelon", "Samoa", "San Marino", "Sao Tomee and Principe", "Saudi Arabia", "Senegal", "Seychelles", "Sierre Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands", "Somali Republic", "South Africa", "South Korea", "Sri Lanka", "St. Helena", "St. Kits-Nevis", "St. Lucia", "St. Vincent/Grenadines", "Sudan", "Suriname", "Svalbard Jan Mayen", "Swaziland", "Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Togo", "Tokeelau", "Tonga", "Trinidad Tobago", "Tunisia", "Turquia", "Turkmenistan", "Turks Caicos Islands", "Tuvalu", "Uganda", "Ukrania", "United Arab Emirates", "Uruguay", "US Minor Outlying Is.", "Uzbekistan", "Vanuatu", "Vatican City State", "Venezuela", "Vietnam", "Virgin Islands: British", "Virgin Islands: US", "Wallis Futuna Islands", "Western Sahara", "Western Samoa", "Yemen", "Yugoslavia", "Zaire", "Zambia", "Zimbabwe");
 
(function() {
    // variable que contendra el valor del input cuando se pulse una tecla
    let valueAutocompletar="";
 
    // array que contendra los valores seleccionados por el usuario
    let valoresSeleccionados=new Array();
 
    // Ordenamos el array para mostrar los datos ordenados
    const sorted=arrayValores.sort();
 
    const input=document.querySelector(".autocompletar input[type=text]");
 
    // En cada pulsacion de una tecla, buscamos las posibles coincidencias
    input.onkeyup=function(e){
 
        // Si se ha pulsado la tecla enter buscamos la palabra exacta
        if (e.which==13) {
 
            // Comprovamos que el valor escrito en el formulario exista en el array
            // de valores, y que no este ya en el array de valores seleccionados.
            if (sorted.indexOf(this.value)!=-1 && valoresSeleccionados.indexOf(this.value)==-1) {
                valoresSeleccionados.push(this.value);
                input.nextElementSibling.style.display="none";
                showTags();
            }
        } else {
            buscar();
        }
    }
 
    /**
     * Funcion que busca el texto introducido en el array de valores
     */
    function buscar()
    {
        input.style.color="Black";
 
        valueAutocompletar=input.value;
        document.querySelector(".autocompletar ul").innerHTML="";
 
        if (valueAutocompletar) {
 
            // Buscamos el indice del primer elemento del array
            var positionStart=sorted.findIndex(findMyWord);
            if (positionStart>=0) {
                var re=new RegExp("^"+valueAutocompletar+"+", "i");
 
                // Recorremos el array de valores desde la primera posición del
                // array que tiene una coincidencia
                for (var i=positionStart;i<sorted.length;i++) {
 
                    // Si el texto coincide con el inicio del valor del array
                    // lo mostraremos
                    if(re.test(sorted[i])) {
                        input.nextElementSibling.style.display="block";
                        var li=document.createElement("li");
                        li.addEventListener("click", seleccion);
                        li.innerText=sorted[i];
                        input.nextElementSibling.appendChild(li);
                    } else {
                        break;
                    }
                }
            } else {
                input.nextElementSibling.style.display="none";
                input.style.color="Red";
            }
        } else {
            input.nextElementSibling.style.display="none";
        }
    }
 
    /**
     * Evento que se ejecuta cuando el cuadro de texto obtiene el foco
     * para mostrar la lista de opciones si las hay
     */
    input.onfocus = () => {
        if (input.value!="") {
            buscar();
 
            // Seleccionamos todo el texto del cuadro de texto
            input.select();
        }
    }
 
    /**
     * Evento que se ejecuta cuando se pulsa en el documento para esconder la
     * lista de opciones
     */
    document.addEventListener("click", () => {
 
        // Se esconde la lista si el foco no esta en el cuadro de texto
        if (input!=document.activeElement) {
            input.nextElementSibling.style.display="none";
        }
    });
 
    /**
     * Función llamada desde el findIndex para buscar la primera coincidencia del
     * texto escrito con el array de valores.
     * Si se ha escrito "pa", devolvera el primer elemento que empiece por "pa", por
     * ejemplo: "pagina"
     *
     * @param string valor del elemento iterado
     *
     * @return boolean
     */
    function findMyWord(element)
    {
        // revisamos si se encuentra la cadena escrita en el input dentro del
        // array de valores
        var re=new RegExp("^"+valueAutocompletar+"+","i");
        return re.test(element);
    }
 
    /**
     * Funcion que se ejecuta en el evento cuando se pulsa con el raton un elemento
     * de la lista
     */
    function seleccion()
    {
        // obtenemos el texto del elemento seleccionado
        const element=this.textContent;
 
        // Comprovamos que el elemento seleccionado se encuentre ya
        // en el array de valores seleccionados
        if (valoresSeleccionados.indexOf(element)==-1) {
            // Añadimos el elemento al array
            valoresSeleccionados.push(element);
 
            // mostramos los tags
            showTags();
        }
    }
 
    /**
     * Función para mostrar los tags
     */
    function showTags()
    {
        const tags=document.getElementById("tags");
 
        // Eliminamos los tags que se muestran en la web
        tags.innerHTML="";
 
        // Ordenamos los tags seleccionados
        const valoresSeleccionadosSorted=valoresSeleccionados.sort();
 
        for (let i=0;i<valoresSeleccionadosSorted.length;i++) {
 
            // Añadimos cada uno de los tags en la web
 
            let span=document.createElement("span");
            span.id=valoresSeleccionadosSorted[i];
            span.addEventListener("click", removeTag);
 
            let div=document.createElement("div");
            div.innerHTML=valoresSeleccionadosSorted[i];
            div.appendChild(span);
            tags.appendChild(div);
        }
    }
 
    /**
     * Funcion para eliminar un tag
     */
    function removeTag()
    {
        valoresSeleccionados.splice( valoresSeleccionados.indexOf(this.id), 1 );
        this.parentElement.remove();
    }
})();
</script>



Comentarios sobre la versión: Versión 1.0 (2)

Imágen de perfil
22 de Septiembre del 2019
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder
Imágen de perfil
5 de Octubre del 2019
estrellaestrellaestrellaestrellaestrella
Experimentar, aprender; desarrollar poniendo en práctica el conocimiento adquirido...
Responder

Comentar la versión: Versión 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s5545