За последние 24 часа нас посетили 22402 программиста и 1148 роботов. Сейчас ищут 684 программиста ...

Datalist

Тема в разделе "JavaScript и AJAX", создана пользователем shtrih, 3 окт 2019.

  1. shtrih

    shtrih Активный пользователь

    С нами с:
    10 дек 2015
    Сообщения:
    59
    Симпатии:
    3
    Добрый день!

    На форме html, есть поле input, которое по аналогии с элементов select представляет выпадающий список. Но отличие в том, что можно начать вводить текст в него и он найдет нужные элементы похожие.

    Вопрос в том, как сделать проверку на js, что если человек начал писать в нём, но не выбрал элемент из выпадающего списка, то поле подсветилось красным, а рядом комментарии.

    Пример,
    есть три позиции в списке:

    Иванов
    Петров
    Сидоров


    Если начать писать "Ива", то покажется один элемент, но если ты его не выберешь, а просто нажмёшь сохранить на форме, то в поле, так и останется значение Ива.

    HTML:
    1.     <input name="street" list="character1" placeholder="Улица" class="col-sm-6 custom-select custom-select-sm">
    2.         <datalist id="character1">
    3.             <?php echo $zet->option_street(); ?>
    4.         </datalist>
    5.  
    Нашёл готовое решение, но почему-то ничего не происходит.

    Код (Javascript):
    1. // Поиск всех input-элементов в DOM, которые привязаны к datalist с помощью атрибута list.
    2. var inputs = document.querySelectorAll('input[list]');
    3. for (var i = 0; i < inputs.length; i++) {
    4.   // Когда значение input изменяется…
    5.   inputs[i].addEventListener('change', function() {
    6.     var optionFound = false,
    7.       datalist = this.list;
    8.     // Определение, существует ли option с текущим значением input.
    9.     for (var j = 0; j < datalist.options.length; j++) {
    10.         if (this.value == datalist.options[j].value) {
    11.             optionFound = true;
    12.             break;
    13.         }
    14.     }
    15.     // используйте функцию setCustomValidity API проверки ограничений валидации
    16.     // чтобы обеспечить ответ пользователю, если нужное значение в datalist отсутствует
    17.     if (optionFound) {
    18.       this.setCustomValidity('');
    19.     } else {
    20.       this.setCustomValidity('Please select a valid value.');
    21.     }
    22.   });
    23. }
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Код (Javascript):
    1. <form id="myform">
    2. <input name="street" list="character1" placeholder="Улица" class="col-sm-6 custom-select custom-select-sm" required>
    3. <datalist id="character1">
    4.      <option value="Иванов">
    5.      <option value="Петров">
    6.      <option value="Сидоров">
    7. </datalist>
    8. <p><input type="submit"></p>
    9. </form>
    10.  
    11.  
    12. <script>
    13. let form = document.getElementById("myform");
    14. form.addEventListener("submit", function(evt)
    15. {
    16.      let street = this.querySelector("input[name=street]"),
    17.      character1 = this.querySelectorAll("#character1 option"),
    18.      find = null;
    19.  
    20.      character1.forEach(function(element) {
    21.           let val = element.value.toLowerCase(),
    22.               str = street.value.toLowerCase();
    23.          
    24.           if(str === val)
    25.           {
    26.                find = 1;  
    27.           }
    28.      });
    29.  
    30.      if( find !== 1)
    31.      {
    32.           evt.preventDefault();
    33.          
    34.      }
    35. });
    36. </script>
     
  3. shtrih

    shtrih Активный пользователь

    С нами с:
    10 дек 2015
    Сообщения:
    59
    Симпатии:
    3
    спасибо. Попробую позже. Пока на уровне аякса решил