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

求助:修复基于HTML和JS的城市-社区级联下拉菜单代码

修复城市-社区级联下拉菜单的联动问题

你的代码核心问题出在onchange事件里的数组取值逻辑:

var z = cityObject[City.value][this.value];

这里cityObject[City.value]已经是当前选中城市对应的社区数组了,你多写了一层[this.value],导致试图从数组里取一个以城市名为下标的值,结果z变成undefined,后续循环自然无法执行。

修复后的完整代码

JavaScript 代码

var cityObject = {
    "City1": ["Neighborhood 1", "Neighborhood 2", "Neighborhood 3", "Neighborhood 4", "Neighborhood 5"],
    "City2": ["Neighborhood 1", "Neighborhood 2"],
    "City3": ["Neighborhood 1", "Neighborhood 2", "Neighborhood 3"],
    "City4": ["Neighborhood 1"]
}
window.onload = function() {
    var City = document.getElementById("City");
    var Neighborhood = document.getElementById("Neighborhood");
    // 初始化城市下拉框
    for (var x in cityObject) {
        City.options[City.options.length] = new Option(x, x);
    }
    // 城市选择变更事件
    City.onchange = function() {
        // 重置社区下拉框,保留默认提示项
        Neighborhood.length = 1;
        // 获取当前选中城市对应的社区数组
        var neighborhoods = cityObject[this.value];
        // 遍历添加社区选项
        for (var i = 0; i < neighborhoods.length; i++) {
            Neighborhood.options[Neighborhood.options.length] = new Option(neighborhoods[i], neighborhoods[i]);
        }
    }
}

HTML 代码

<select id="City" name="City"></select>
<select id="Neighborhood" name="Neighborhood">
   <option value="" selected="selected">Select city first</option>
</select>

额外优化建议(可选)

  • 给城市下拉框添加默认提示项,比如<option value="" selected>Select a city</option>,避免页面加载后直接选中第一个城市但社区未更新的情况
  • 用forEach替代传统for循环,让代码更简洁:
    neighborhoods.forEach(neighborhood => {
        Neighborhood.add(new Option(neighborhood, neighborhood));
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:40:35