如何使用纯 Javascript 从输入数据列表中获取建议值?

dig*_*tie 1 javascript input optionmenu autosuggest html-datalist

我使用纯文本输入和数据列表在用户与输入交互时建议值。我想知道是否有办法显示建议的项目。

例如

    document.getElementById('myBrowser').addEventListener('input', function() {
      console.log(this.list.suggested); // logs out the suggested values 
    });
Run Code Online (Sandbox Code Playgroud)
    <label for="myBrowser">Choose a browser from this list:</label>
    <input list="browsers" id="myBrowser" name="myBrowser" />
    <datalist id="browsers">
      <option value="Chrome"></option>
      <option value="Firefox"></option>
      <option value="Opera"></option>
      <option value="Safari"></option>
      <option value="Microsoft Edge"></option>
    </datalist>
Run Code Online (Sandbox Code Playgroud)

因此,如果我输入“Fire”,建议值应该是 ['Firefox']

Adr*_*dri 5

你可以这样做:

// Obtain the available browsers
let options = Array.from(document.querySelectorAll('#browsers option')).map((option) => option.value);

document.getElementById('myBrowser').addEventListener('input', function () {
  const hint = this.value.toLowerCase();
  // Obtain options matching input
  const suggestions = options.filter((option) => option.toLowerCase().includes(hint));

  console.log(suggestions);
});
Run Code Online (Sandbox Code Playgroud)
<label for="myBrowser">Choose a browser from this list:</label>
<input list="browsers" id="myBrowser" name="myBrowser" />
<datalist id="browsers">
  <option value="Chrome"></option>
  <option value="Firefox"></option>
  <option value="Opera"></option>
  <option value="Safari"></option>
  <option value="Microsoft Edge"></option>
</datalist>
Run Code Online (Sandbox Code Playgroud)

这将获得与 Chrome 上完全相同的列表,但在其他浏览器上可能并非如此。

至于从浏览器直接访问建议的列表,我不能确定这是否可行。

  • 好东西人们。也许有一天会出现一个用于获取建议的标准 API! (3认同)
  • @Adri,我不想竞争。抱歉,如果您感到受到侮辱或其他什么。逻辑是相同的,我只是想避免重新输入所有内容。哈哈。尽管这是允许的,但为了防止与 digitalWestie 竞争或混淆而不是提供帮助,并且因为我看到您比我更愿意不断改进解决方案,所以我将删除我的。xD 我希望我们能够很好地解决这个问题!;) (2认同)
  • 是的,@GrafiCode,我辞职是因为我的意图从来不是竞争。我更愿意帮助这个答案变得更好(如果可以的话)而不是战斗。xD 希望这只是一个糟糕的时刻,没有人觉得这是一场战争。哈哈。 (2认同)