- Publicado en
Autocompletado Input
Un sencillo input para un formulario.
input.html:
La clase del div es para poner los colores del background , la posicion general del div y su tipo de letra,
Los estilos style.css:
body {
background-color: blue;
font-family: sans-serif;
}
.autocomplete {
display: flex;
flex-direction: column;
min-height: 100vh;
align-items: center;
justify-content: top;
padding-top: 100px;
}
input {
font-size: 2em;
width: 300px;
}
.autocomplete-results {
display: none; // Se indica None, para que no se muestre, luego con el javascript lo habilitaremos
width: 300px;
margin-top: -2px;
font-size: 1.3em;
color: #eee;
list-style: none;
margin: 0;
padding: 0;
}
.autocomplete-results li {
margin: 0;
padding: 0;
padding: 10px 0 10px 10px;
border-right: 2px solid #eee;
border-bottom: 2px solid #eee;
border-left: 2px solid #eee;
}
.autocomplete-results li:hover {
background-color: #eee;
color: blue;
cursor: pointer;
}
Y ahora el javascript: script.js:
let input = document.querySelector("input");
let autocomplete_results = document.getElementById('autocomplete-results');
input.addEventListener('keyup', (event) => {
autocomplete_results.style.display = 'block';
let key = event.target.value;
console.log(key)
if(key.length > 0) {
search(key);
}
else {
build_list();
}
})
const search = (key) => {
fetch(`https://restcountries.eu/rest/v2/name/${key}?fields=name`)
.then(res => res.json())
.then(data => {
if(Array.isArray(data)) {
build_list(data.map(item => {
return item.name
}))
}
})
}
const build_list = (items) => {
console.log('elems', items)
if(items === undefined) {
items = [];
}
autocomplete_results.innerHTML = '';
items.slice(0,10).map(item => {
autocomplete_results.innerHTML += `<li>${item}</li>`;
})
}
document
.getElementById("autocomplete-results")
.addEventListener("click", e => {
if (e.target && e.target.nodeName == "LI") {
input.value = e.target.innerHTML;
build_list()
}
});