当前位置:首页 > JavaScript

js实现三级级联

2026-03-01 07:36:00JavaScript

三级级联实现方法

三级级联通常指三个层级的下拉菜单,后一级的选项内容根据前一级的选择动态变化。以下是使用JavaScript实现三级级联的完整方案。

数据结构准备

假设三级级联的数据结构如下,存储省、市、区的关系:

const regionData = {
  "江苏省": {
    "南京市": ["玄武区", "鼓楼区", "秦淮区"],
    "苏州市": ["姑苏区", "虎丘区", "吴中区"]
  },
  "浙江省": {
    "杭州市": ["上城区", "下城区", "江干区"],
    "宁波市": ["海曙区", "江北区", "镇海区"]
  }
};

HTML结构

创建三个select元素,分别对应省、市、区:

js实现三级级联

<select id="province"></select>
<select id="city"></select>
<select id="district"></select>

JavaScript实现

初始化省份下拉框:

const provinceSelect = document.getElementById('province');
const citySelect = document.getElementById('city');
const districtSelect = document.getElementById('district');

// 初始化省份选项
Object.keys(regionData).forEach(province => {
  const option = document.createElement('option');
  option.value = province;
  option.textContent = province;
  provinceSelect.appendChild(option);
});

省份变化时加载城市:

js实现三级级联

provinceSelect.addEventListener('change', function() {
  citySelect.innerHTML = '<option value="">请选择城市</option>';
  districtSelect.innerHTML = '<option value="">请选择区县</option>';

  const selectedProvince = this.value;
  if (selectedProvince) {
    Object.keys(regionData[selectedProvince]).forEach(city => {
      const option = document.createElement('option');
      option.value = city;
      option.textContent = city;
      citySelect.appendChild(option);
    });
  }
});

城市变化时加载区县:

citySelect.addEventListener('change', function() {
  districtSelect.innerHTML = '<option value="">请选择区县</option>';

  const selectedProvince = provinceSelect.value;
  const selectedCity = this.value;
  if (selectedProvince && selectedCity) {
    regionData[selectedProvince][selectedCity].forEach(district => {
      const option = document.createElement('option');
      option.value = district;
      option.textContent = district;
      districtSelect.appendChild(option);
    });
  }
});

完整代码示例

<!DOCTYPE html>
<html>
<head>
  <title>三级级联示例</title>
</head>
<body>
  <select id="province"></select>
  <select id="city"></select>
  <select id="district"></select>

  <script>
    const regionData = {
      "江苏省": {
        "南京市": ["玄武区", "鼓楼区", "秦淮区"],
        "苏州市": ["姑苏区", "虎丘区", "吴中区"]
      },
      "浙江省": {
        "杭州市": ["上城区", "下城区", "江干区"],
        "宁波市": ["海曙区", "江北区", "镇海区"]
      }
    };

    const provinceSelect = document.getElementById('province');
    const citySelect = document.getElementById('city');
    const districtSelect = document.getElementById('district');

    // 初始化省份
    provinceSelect.innerHTML = '<option value="">请选择省份</option>';
    Object.keys(regionData).forEach(province => {
      const option = document.createElement('option');
      option.value = province;
      option.textContent = province;
      provinceSelect.appendChild(option);
    });

    // 省份变化事件
    provinceSelect.addEventListener('change', function() {
      citySelect.innerHTML = '<option value="">请选择城市</option>';
      districtSelect.innerHTML = '<option value="">请选择区县</option>';

      const selectedProvince = this.value;
      if (selectedProvince) {
        Object.keys(regionData[selectedProvince]).forEach(city => {
          const option = document.createElement('option');
          option.value = city;
          option.textContent = city;
          citySelect.appendChild(option);
        });
      }
    });

    // 城市变化事件
    citySelect.addEventListener('change', function() {
      districtSelect.innerHTML = '<option value="">请选择区县</option>';

      const selectedProvince = provinceSelect.value;
      const selectedCity = this.value;
      if (selectedProvince && selectedCity) {
        regionData[selectedProvince][selectedCity].forEach(district => {
          const option = document.createElement('option');
          option.value = district;
          option.textContent = district;
          districtSelect.appendChild(option);
        });
      }
    });
  </script>
</body>
</html>

动态加载数据方案

如果需要从服务器动态获取数据,可以使用fetch API:

async function loadCities(province) {
  const response = await fetch(`/api/cities?province=${province}`);
  return await response.json();
}

provinceSelect.addEventListener('change', async function() {
  const cities = await loadCities(this.value);
  // 更新城市下拉框...
});

注意事项

  • 确保在用户选择前一级选项后,再加载下一级选项
  • 每次上级选项变化时,需要清空下级所有选项
  • 添加默认空选项提升用户体验
  • 考虑添加加载状态提示,特别是网络请求时

标签: 级联js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…

js实现刷新页面

js实现刷新页面

刷新页面的方法 在JavaScript中,可以通过多种方式实现页面刷新。以下是几种常见的方法: 使用 location.reload() 调用 location.reload() 方法可以重新加载当…