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

技术需求:实现三级联动下拉菜单,附出生地选择HTML代码片段

实现三级联动下拉框方案

针对你需要的三级联动下拉框功能(选择上级下拉后触发显示并加载下级选项),我结合你提供的现有HTML代码,给出完整的实现步骤:

1. 完善HTML结构

首先,在现有区域(Region)下拉框的基础上,添加省份(Province)和城市(City)的下拉容器,初始设置为隐藏状态,只有当选定上级选项后才显示:

<div class="col-md-12"> 
  <span class="text-danger">*</span> Birthplace: 
</div>
<!-- 区域下拉(已有的代码) -->
<div class="col-md-4">
  <div class="form-group">
    <div class="col-md-12">
      <select class="form-control" data-val="true" data-val-number="The field Region must be a number." data-val-required="Please select Region" id="BRegionId" name="BRegionId">
        <option value="">Select Region</option>
        <option value="1">Region I - Ilocos</option>
        <option value="2">Region II - Cagayan Valley</option>
        <!-- 更多区域选项 -->
      </select>
    </div>
  </div>
</div>
<!-- 省份下拉(初始隐藏) -->
<div class="col-md-4" id="provinceContainer" style="display:none;">
  <div class="form-group">
    <div class="col-md-12">
      <select class="form-control" id="BProvinceId" name="BProvinceId">
        <option value="">Select Province</option>
      </select>
    </div>
  </div>
</div>
<!-- 城市下拉(初始隐藏) -->
<div class="col-md-4" id="cityContainer" style="display:none;">
  <div class="form-group">
    <div class="col-md-12">
      <select class="form-control" id="BCityId" name="BCityId">
        <option value="">Select City</option>
      </select>
    </div>
  </div>
</div>

2. 编写JavaScript联动逻辑

使用原生JavaScript实现联动效果,监听下拉框的change事件,根据选中的值加载对应下级选项,并显示下级容器:

// 模拟后端返回的区域-省份-城市数据,实际项目中可以通过AJAX从接口获取
const locationData = {
  1: { // Region I - Ilocos
    provinces: [
      { id: 101, name: "Ilocos Norte" },
      { id: 102, name: "Ilocos Sur" },
      { id: 103, name: "La Union" },
      { id: 104, name: "Pangasinan" }
    ],
    cities: {
      101: [{ id: 1001, name: "Laoag City" }, { id: 1002, name: "Batac City" }],
      102: [{ id: 1003, name: "Vigan City" }, { id: 1004, name: "Candon City" }],
      // 更多城市数据
    }
  },
  2: { // Region II - Cagayan Valley
    provinces: [
      { id: 201, name: "Cagayan" },
      { id: 202, name: "Isabela" }
    ],
    cities: {
      201: [{ id: 2001, name: "Tuguegarao City" }],
      // 更多城市数据
    }
  }
};

// 获取DOM元素
const regionSelect = document.getElementById('BRegionId');
const provinceContainer = document.getElementById('provinceContainer');
const provinceSelect = document.getElementById('BProvinceId');
const cityContainer = document.getElementById('cityContainer');
const citySelect = document.getElementById('BCityId');

// 区域选择变化事件
regionSelect.addEventListener('change', function() {
  const selectedRegionId = this.value;
  // 清空省份和城市选项,隐藏容器
  provinceSelect.innerHTML = '<option value="">Select Province</option>';
  citySelect.innerHTML = '<option value="">Select City</option>';
  cityContainer.style.display = 'none';
  
  if (selectedRegionId) {
    // 显示省份容器
    provinceContainer.style.display = 'block';
    // 加载对应省份选项
    const provinces = locationData[selectedRegionId].provinces;
    provinces.forEach(province => {
      const option = document.createElement('option');
      option.value = province.id;
      option.textContent = province.name;
      provinceSelect.appendChild(option);
    });
  } else {
    // 未选择区域时隐藏省份容器
    provinceContainer.style.display = 'none';
  }
});

// 省份选择变化事件
provinceSelect.addEventListener('change', function() {
  const selectedRegionId = regionSelect.value;
  const selectedProvinceId = this.value;
  // 清空城市选项
  citySelect.innerHTML = '<option value="">Select City</option>';
  
  if (selectedProvinceId) {
    // 显示城市容器
    cityContainer.style.display = 'block';
    // 加载对应城市选项
    const cities = locationData[selectedRegionId].cities[selectedProvinceId];
    cities.forEach(city => {
      const option = document.createElement('option');
      option.value = city.id;
      option.textContent = city.name;
      citySelect.appendChild(option);
    });
  } else {
    // 未选择省份时隐藏城市容器
    cityContainer.style.display = 'none';
  }
});

3. 关键说明

  • 数据来源:示例中用了模拟的locationData对象,实际项目中你可以通过fetch或XMLHttpRequest从后端接口获取对应级别的数据,这样更灵活。
  • 表单验证:你原有的区域下拉框带有data-val相关的验证属性,记得给省份和城市下拉框也添加对应的验证规则,确保用户完成三级选择。
  • 样式适配:示例中用了display:none来控制容器显示隐藏,你可以根据项目的CSS框架(比如Bootstrap)调整样式,比如用d-none类来隐藏元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:21:01