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

纯JavaScript实现根据第一个select选项动态更改第二个select可选内容

实现思路

我们可以通过遍历第二个下拉框的所有选项,根据第一个下拉框的选中值控制选项的显示/隐藏,全程使用原生JS实现,无需引入任何第三方库。


完整可运行的JS代码

方案1:通过hidden属性控制显隐(代码更简洁,适配现代浏览器)

function catch_value_types() {
    // 获取第一个下拉框的选中值
    const selectedType = document.getElementById("types").value;
    // 获取第二个下拉框的所有选项
    const allFoodOptions = document.querySelectorAll("#food option");

    // 遍历所有选项,匹配的显示,不匹配的隐藏
    allFoodOptions.forEach(option => {
        option.hidden = option.value !== selectedType;
    });

    // 兼容处理:如果当前选中的食品属于被隐藏的分类,自动切换到当前分类的第一个选项
    const currentSelected = document.querySelector("#food option:checked");
    if (currentSelected.hidden) {
        document.querySelector("#food option:not([hidden])").selected = true;
    }
}

方案2:缓存原始选项重新渲染(兼容性更强,无隐藏选项残留)

// 页面加载后预先缓存所有食品选项,避免切换时丢失数据
const foodSelect = document.getElementById("food");
const originalFoodOptions = Array.from(foodSelect.options);

function catch_value_types() {
    const selectedType = document.getElementById("types").value;
    // 先清空当前第二个下拉框的所有内容
    foodSelect.innerHTML = "";
    // 过滤出匹配当前分类的选项,添加到下拉框
    originalFoodOptions.forEach(option => {
        if (option.value === selectedType) {
            foodSelect.appendChild(option.cloneNode(true));
        }
    });
    // 默认选中当前分类的第一个选项
    foodSelect.selectedIndex = 0;
}

代码说明

  • 两种方案均100%使用原生JavaScript实现,无任何第三方库依赖
  • 方案1逻辑简单代码量少,适合绝大多数现代浏览器场景
  • 方案2通过全量重新渲染的方式实现,不会出现隐藏选项被意外触发的问题,兼容性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:27:03