JQuery: 如何实现 "城市,州" 自动补全

在许多网站中,我们经常需要输入用户的地址信息。而有时为了避免输错,我们需要在输入框中提供自动补全的功能。本文将介绍如何使用 JQuery 实现一个 "城市,州" 的自动补全功能。

准备工作

首先,我们需要准备好一个含有所有城市和州的数据源。这里我们可以使用 jQuery UI Autocomplete 插件提供的数据源,也可以使用现成的 JSON 文件。

假设我们已经准备好了一个名为 cities.json 的 JSON 文件,其格式如下:

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

接下来,我们需要在 HTML 中引用 JQuery 和 jQuery UI 库文件,并创建一个输入框用于输入城市和州的信息:

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

实现自动补全

接下来,我们就可以开始实现自动补全的功能了。首先,我们需要通过 AJAX 加载 cities.json 文件:

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

然后,我们需要定义一个函数用于过滤数据源中的城市和州信息:

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

在这个函数中,request.term 表示用户当前输入的值,$.ui.autocomplete.escapeRegex() 函数用于将这个值转换为正则表达式,并将其与数据源中的城市和州信息进行比较。如果匹配成功,就将这个城市和州的信息添加到结果集中返回。

最后,我们只需要调用 jQuery UI Autocomplete 插件即可实现自动补全的功能:

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

在这个代码片段中,source 属性指定了数据源,minLength 属性表示当用户输入的字符数少于 2 时不进行自动补全。

示例代码

完整的示例代码如下:

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

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

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