当前位置:首页 > JavaScript

js实现三级级联

2026-04-04 08:12:20JavaScript

实现三级级联的核心思路

三级级联通常指三个下拉菜单之间的联动选择,例如省市区选择。当第一级选择变化时,第二级和第三级内容相应更新;第二级变化时,第三级内容更新。

数据结构准备

使用嵌套对象或数组存储级联数据。例如:

const regionData = {
  '江苏省': {
    '南京市': ['玄武区', '鼓楼区'],
    '苏州市': ['姑苏区', '工业园区']
  },
  '浙江省': {
    '杭州市': ['上城区', '西湖区'],
    '宁波市': ['海曙区', '江北区']
  }
};

HTML结构示例

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

JavaScript实现步骤

初始化一级菜单

js实现三级级联

const provinceSelect = document.getElementById('province');
Object.keys(regionData).forEach(province => {
  const option = document.createElement('option');
  option.value = province;
  option.textContent = province;
  provinceSelect.appendChild(option);
});

一级菜单变化时更新二级菜单

provinceSelect.addEventListener('change', function() {
  const citySelect = document.getElementById('city');
  citySelect.innerHTML = '<option value="">请选择</option>';
  const districtSelect = document.getElementById('district');
  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);
    });
  }
});

二级菜单变化时更新三级菜单

js实现三级级联

document.getElementById('city').addEventListener('change', function() {
  const districtSelect = document.getElementById('district');
  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);
    });
  }
});

完整实现示例

document.addEventListener('DOMContentLoaded', function() {
  // 数据结构和HTML元素初始化代码
  // 事件监听器代码
});

优化建议

使用AJAX动态加载数据可减少初始页面负载

function loadProvinceData() {
  // 模拟AJAX请求
  fetch('/api/provinces').then(response => response.json()).then(data => {
    // 填充省份下拉框
  });
}

添加默认选项可提升用户体验

provinceSelect.innerHTML = '<option value="">请选择省份</option>';

注意事项

确保在DOM加载完成后执行JavaScript代码。对于动态创建的元素,可能需要使用事件委托。考虑添加数据验证逻辑,防止因数据缺失导致的错误。

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

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…