You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:实现菜单选择后从JSON加载子选项的联动功能

实现区域-街道联动下拉框功能

现有列表菜单点击后可将选中值同步到distId下拉框,需在此基础上,通过指定JSON数据实现区域(dist)与街道(ward)的联动:点击列表中的区域项,wardId下拉框自动加载对应区域的街道选项。


完整实现代码

HTML 结构

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<li><a href="#" class="city-link" data-city="city-one">city-one</a>
  <ul class="list-dist">
    <li><a href="#" class="dist-item" data-dist="dist 1">dist 1</a></li>
    <li><a href="#" class="dist-item" data-dist="dist 2">dist 2</a></li>
    <li><a href="#" class="dist-item" data-dist="dist 3">dist 3</a></li>
  </ul>
</li>

<select name="distId" id="distId">
  <option value="dist 1">dist 1</option>
  <option value="dist 2">dist 2</option>
  <option value="dist 3">dist 3</option>
</select>

<select id="wardId">
</select>

JavaScript 逻辑

// 定义区域-街道映射数据
const areaData = {
  "city-one": {
    "dist 1": [
      {"name": "wards 1"},
      {"name": "wards 2"},
      {"name": "wards 3"}
    ],
    "dist 2": [
      {"name": "wards 4"},
      {"name": "wards 5"},
      {"name": "wards 6"}
    ]
  },
  "city-two": {
    "dist zxc": [
      {"name": "wards z"},
      {"name": "wards x"},
      {"name": "wards c"}
    ],
    "city xyz": [
      {"name": "wards x"},
      {"name": "wards y"},
      {"name": "wards z"}
    ],
    "dist abc": [
      {"name": "wards a"},
      {"name": "wards b"},
      {"name": "wards c"}
    ]
  }
};

// 默认选中城市
let currentCity = "city-one";

// 城市切换事件(支持多城市扩展)
$(".city-link").click(function(e) {
  e.preventDefault();
  currentCity = $(this).data("city");
});

// 区域列表点击事件
$(".list-dist li a.dist-item").click(function(e) {
  e.preventDefault();
  const selectedDist = $(this).data("dist");
  
  // 同步选中值到distId下拉框
  $("#distId").val(selectedDist);
  
  // 切换distId选项显示状态
  $("#distId option").each(function() {
    $(this).toggle($(this).val() === selectedDist);
  });
  
  // 加载对应街道数据
  loadWards(selectedDist);
});

// 加载街道下拉选项
function loadWards(distName) {
  const wardSelect = $("#wardId");
  wardSelect.empty();
  
  // 获取当前城市下的街道数据
  const wards = areaData[currentCity]?.[distName];
  
  if (wards?.length) {
    wards.forEach(ward => {
      wardSelect.append(`<option value="${ward.name}">${ward.name}</option>`);
    });
  } else {
    wardSelect.append("<option value=''>暂无街道数据</option>");
  }
}

核心优化点

  • 替换原有的class标识为data-*属性,避免空格导致的选择器错误
  • 将数据与逻辑分离,便于后续维护和扩展多城市/区域
  • 封装街道加载逻辑,统一处理清空、生成选项及无数据场景
  • 保留原有的dist下拉框同步逻辑,确保功能兼容

内容的提问来源于stack exchange,提问作者Jayzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:25:19