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

级联下拉选中上级选项时显示/隐藏下级下拉的实现方法

三级级联下拉显隐控制实现

需求说明

需要实现三级级联下拉的显隐控制,规则如下:

  • 主分类select下拉框未选中有效选项时,隐藏子分类select下拉框
  • 子分类select下拉框未选中有效选项时,隐藏其下的类型/设备select下拉框

交互效果:主分类下拉默认选中值为「Select Category」,当切换选中「MainCategory1」等有效分类时,子分类下拉框自动显示;子分类选中对应有效选项后,类型分类下拉框自动显示。

初始代码

JS代码

var maincatObject = {
  "MainCategory1": {
    "Subcategory 1.1": ["Type 1.1.1", "Type 1.1.2"],
    "Subcategory 1.2": ["Type 1.2.1", "Type 1.2.2"],
    "Subcategory 1.3": ["Type 1.3.1", "Type 1.3.2"],
    "Subcategory 1.4": ["Type 1.4.1", "Type 1.4.2"]
  },
  "MainCategory2": {
    "Subcategory 2.1": ["Type 2.1.1", "Type 2.1.2"],
    "Subcategory 2.2": ["Type 2.2.1", "Type 2.2.2"],
    "Subcategory 2.3": ["Type 2.3.1", "Type 2.3.2"],
    "Subcategory 2.4": ["Type 2.4.1", "Type 2.4.2"]
  }
}
window.onload = function() {
  var maincatSel = document.getElementById("maincat");
  var subcatSel = document.getElementById("subcat");
  var typedevSel = document.getElementById("typedev");
  for (var x in maincatObject) {
    maincatSel.options[maincatSel.options.length] = new Option(x, x);
  }
  maincatSel.onchange = function() {
    // 清空子分类、类型下拉的已有选项
    typedevSel.length = 1;
    subcatSel.length = 1;
    // 填充对应子分类选项
    for (var y in maincatObject[this.value]) {
      subcatSel.options[subcatSel.options.length] = new Option(y, y);
    }
  }
  subcatSel.onchange = function() {
    // 清空类型下拉的已有选项
    typedevSel.length = 1;
    // 填充对应类型选项
    var z = maincatObject[maincatSel.value][this.value];
    for (var i = 0; i < z.length; i++) {
      typedevSel.options[typedevSel.options.length] = new Option(z[i], z[i]);
    }
  }
}

HTML代码

<select name="maincat" id="maincat">
  <option value="" selected="selected">Select Category</option>
</select>
<br><br> Sub-Category:
<select name="subcat" id="subcat">
  <option value="" selected="selected">Please select sub-category first</option>
</select>
<br><br> Type/Device:
<select name="typedev" id="typedev">
  <option value="" selected="selected">Please select type or device</option>
</select>
<br><br>

解决方案

通过控制下拉元素的style.display属性实现显隐逻辑,修改后的JS代码如下:

window.onload = function() {
  var maincatSel = document.getElementById("maincat");
  var subcatSel = document.getElementById("subcat");
  var typedevSel = document.getElementById("typedev");
  for (var x in maincatObject) {
    maincatSel.options[maincatSel.options.length] = new Option(x, x);
    // 初始化时隐藏子分类、类型下拉
    subcatSel.style.display = 'none';
    typedevSel.style.display = 'none';
  }
  maincatSel.onchange = function() {
    // 显示子分类下拉,隐藏类型下拉
    subcatSel.style.display = 'block';
    typedevSel.style.display = 'none';
    // 清空子分类、类型下拉的已有选项
    subcatSel.length = 1;
    typedevSel.length = 1;
    // 填充对应子分类选项
    for (var y in maincatObject[this.value]) {
      subcatSel.options[subcatSel.options.length] = new Option(y, y);
    }
  }
  subcatSel.onchange = function() {
    // 显示类型下拉
    typedevSel.style.display = 'block';
    // 清空类型下拉的已有选项
    typedevSel.length = 1;
    // 填充对应类型选项
    var z = maincatObject[maincatSel.value][this.value];
    for (var i = 0; i < z.length; i++) {
      typedevSel.options[typedevSel.options.length] = new Option(z[i], z[i]);
    }
  }
}

实现逻辑说明:

  • 页面初始化时直接隐藏子分类、类型两个下拉框
  • 主分类选项变更时,显示子分类下拉,同时隐藏类型下拉、清空之前的选择
  • 子分类选项变更时,显示类型下拉、清空之前的选择

仅需在对应逻辑位置添加元素变量.style.display = 'none'/'block'代码即可完成需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:27:04