JavaScript 自动完成(Autocomplete)功能的实现

Web 应用程序经常需要自动完成(Autocomplete)这种用户输入的功能,以提高用户体验和工作效率。本文将介绍如何使用纯 JavaScript 实现自动完成功能,而不依赖于任何外部库。

实现原理

要实现自动完成,我们需要做以下几件事情:

  1. 监听用户输入的事件。
  2. 根据用户已经输入的内容,过滤出可能的候选项列表。
  3. 在一个下拉列表中显示候选项。
  4. 当用户选择某个候选项时,把它填入输入框中。

实现步骤

第一步:监听用户输入事件

我们需要监听用户在输入框中的输入事件,当用户输入变化时,我们就需要重新计算候选项列表并显示出来。我们可以使用 input 事件监听输入框的输入变化:

----- ----- - ------------------------------------
------------------------------- ---------- -
  -- --------
---

第二步:计算候选项列表

为了计算候选项列表,我们需要一个数据源,它包含了所有可选的项。这些项可以是一个数组、一个对象等等。我们需要使用 filter() 方法来根据用户输入来过滤出候选项:

----- ---------- - --------- --------- --------- ------- --------------

-------- --------------------------- -
  ------ ------------------------------------- -
    ------ ------------------------------------------------------------
  ---
-

上面的 filterCandidates() 函数将返回一个数组,它包含所有以用户输入的文本开头的候选项。

第三步:在下拉列表中显示候选项

当候选项列表被计算出来后,我们需要把它们显示在下拉列表中。我们可以使用 HTML 和 CSS 来创建一个下拉列表:

---- ---------------------
  ------ ------------- ------------
  ---- -----------------------
------
------------- --------- -
  --------- ---------
  -------- --
  ----------------- -----
  ------- --- ----- -----
  ----------- ------
  ----------- -------
  -------- -----
-

------------- --------- ----- -
  -------- ----
  ------- --------
-

------------- --------- ----------- -
  ----------------- --------
-

这里的 .autocomplete 类是整个自动完成组件的容器,包含了一个输入框和一个下拉列表。下拉列表使用绝对定位来覆盖输入框,并使用 display: none 属性来隐藏。

接着,我们需要在 JavaScript 中更新下拉列表的内容:

----- -------- - ------------------------------------- ------------

-------- ------------------- -
  ------------------ - ---
  ---------------------------- -
    ----- --- - ------------------------------
    --------------------------
    --------------- - -----
    --------------------------
  ---
  ---------------------- - --------
-

上面的 showDropdown() 函数将传入的候选项数组列表渲染为一个下拉列表,并显示出来。

第四步:处理选中候选项事件

当用户点击了某个候选项时,我们需要把它填入输入框中并隐藏下拉列表。我们可以使用 click 事件监听候选项的点击事件:

---------------------------------- --------------- -
  -- ----------------------------------------- -
    ----------- - -------------------------
    ---------------------- - -------
  -
---

当用户点击某个候选项时,我们将该项的文本内容填入输入框,并隐藏下拉列表。

完整代码示例

下面是完整的自动完成组件实现代码示例:

---- ---------------------
  ------ ------------- ------------
  -

- ----------------------------------------------------------- --------
---------------------------------------------------------------------------------------