Blog Tinux Net

javascript-input

Todas las publicaciones etiquetadas javascript-input por Blog Tinux Net
  • 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()
        }
      });