Javascript 自动完成不会清除没有输入的建议

Javascript Autocomplete doesn't clear suggestion with no input

我观看了有关如何使用 JSON 文件和 Fetch 将 Javascript 与自动完成结合使用的教程。一切正常;以下情况除外:

JSFiddle 上的示例不起作用,因为我无法添加任何资产。 这是当输入框中没有字符时应该清除数据的代码:

if (matches.length === 0) {
matchList.innerHTML = ''; // Line 31: This doesn't clear the results when no input is entered.

}

但是在 CSS 字段中,我硬编码了一些 JSON 文件供您参考。

提前致谢, 马特

使用 onChange() 可以检查输入标签中关键字的最终长度,对于 NULL 可以忽略该建议。

我研究了代码并对其进行了研究。我不得不将代码分成两个事件。缺少的是加载 DOM 时,然后获取状态列表。这是修改后的代码:

const search = document.getElementById('search');
const matchList = document.getElementById('match-list');
let states;

// Get states
const getStates = async () => {
  const res = await fetch('states.json');
  states = await res.json();
};

// FIlter states
const searchStates = (searchText) => {
  // Get matches to current text input
  let matches = states.filter((state) => {
    const regex = new RegExp(`^${searchText}`, 'gi');
    return state.name.match(regex) || state.abbr.match(regex);
  });

  // Clear when input or matches are empty
  if (searchText.length === 0) {
    matches = [];
    matchList.innerHTML = '';
  }

  outputHtml(matches);
};

// Show results in HTML
const outputHtml = (matches) => {
  if (matches.length > 0) {
    const html = matches
      .map(
        (matt) => `<div class="card card-body mb-1">
    <h4>${matt.name} (${matt.abbr}) 
    <span class="text-primary">${matt.capital}</span></h4>
    <small>Lat: ${matt.lat} / Long: ${matt.long}</small>
   </div>`
      )
      .join('');
    matchList.innerHTML = html;
  }
};

window.addEventListener('DOMContentLoaded', getStates);
search.addEventListener('input', () => searchStates(search.value));