JavaScript省市级联下拉菜单实例

本文将介绍如何使用JavaScript编写一个省市级联的下拉菜单。该下拉菜单可以根据用户选择的省份动态加载对应的城市信息。本文涵盖了以下内容:

  • HTML结构搭建
  • 数据源准备
  • 动态创建下拉菜单
  • 监听事件并实现级联效果
  • 完整示例代码

HTML结构搭建

首先,我们需要在HTML页面中添加两个select元素,一个用于显示省份,另一个用于显示城市。同时,我们需要为这两个select元素定义id属性,以便后续使用JavaScript进行操作。

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

数据源准备

数据源是指提供给下拉菜单的选项数据。在本例中,我们需要准备一组包含所有省份和其对应的城市信息的JSON数据。一种常见实践是将省份作为JSON对象的键,其值为包含该省所有城市的数组。

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

动态创建下拉菜单

接下来,我们需要使用JavaScript动态创建省份和城市的下拉菜单选项。首先,我们可以通过遍历cityData对象的键来创建一个包含所有省份的选项列表。

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

对于城市下拉菜单,我们可以从数据源中取出当前选中省份对应的城市数组并遍历其中的元素,然后将它们添加到城市下拉菜单中。

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

在这里,我们使用了addEventListener方法来监听省份下拉菜单的change事件。在该事件触发时,我们获取用户选择的省份,并根据该省份从数据源中取出城市数组。接着,我们清空城市下拉菜单中原有的选项,然后遍历城市数组并将各选项添加到城市下拉菜单中。

完整示例代码

最终的JavaScript省市级联下拉菜单实例代码如下。你可以将其复制到HTML页面的script标签中,或者单独存储为一个.js文件引入到HTML页面中。

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

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

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