Упреждающий ввод с надлежащим пользовательским интерфейсом и оптимизация производительности в простом JavaScript

Вот пример того, как вы можете реализовать компонент с вводом текста, используя простой JavaScript с надлежащим пользовательским интерфейсом и оптимизацией производительности.

<input type="text" id="typeahead">
<ul id="suggestions" style="display: none;"></ul>
<script>
  const input = document.getElementById("typeahead");
  const suggestionsList = document.getElementById("suggestions");
  let suggestions = [];

  input.addEventListener("input", function() {
    const value = input.value;
    let filteredSuggestions = [];
    suggestions.forEach(suggestion => {
      if (suggestion.toLowerCase().startsWith(value.toLowerCase())) {
        filteredSuggestions.push(suggestion);
      }
    });
    
    if (filteredSuggestions.length > 0) {
      suggestionsList.style.display = "block";
      suggestionsList.innerHTML = "";
      filteredSuggestions.forEach(suggestion => {
        const suggestionItem = document.createElement("li");
        suggestionItem.innerHTML = suggestion;
        suggestionItem.addEventListener("click", function() {
          input.value = suggestion;
          suggestionsList.style.display = "none";
        });
        suggestionsList.appendChild(suggestionItem);
      });
    } else {
      suggestionsList.style.display = "none";
    }
  });
  
  input.addEventListener("focus", function() {
    const value = input.value;
    if (value.length > 0) {
      suggestionsList.style.display = "block";
    }
  });
  
  input.addEventListener("blur", function() {
    suggestionsList.style.display = "none";
  });
  
  // Example data
  suggestions = ["apple", "banana", "cherry", "date", "elderberry"];
</script>

В этом примере у нас есть элемент ввода и неупорядоченный список для отображения предложений. Код прослушивает событие «input» для элемента ввода и фильтрует предложения на основе значения ввода. Отфильтрованные предложения отображаются в неупорядоченном списке, и отображение предложений скрывается, когда ввод теряет фокус.