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

双下拉框为多div添加指定类时首个下拉框失效问题排查

问题描述

我运营一家机加工车间,员工分属不同预设岗位类别,岗位决定其可进入的车间区域。员工可被分配1-2个岗位,部分区域对所有岗位开放。我希望通过两个下拉框选择岗位,当员工满足岗位要求时,对应的可访问区域高亮为绿色。单个下拉框时功能正常,但添加第二个下拉框后,首个下拉框完全失效。

当前代码

HTML

<div name="jobs-div" id="jobs-div">
    <p>Assign Jobs:</p>
    <div name="jobs" id="jobs">
        <div name="job1-dropdown" id="job1-dropdown">
            <label for="job1">Job 1:</label>
            <select name="job1" id="job1">
                <option selected="selected" value="default">None</option>
                <option value=".mgr">Manager</option>
                <option value=".sl">Shift Lead</option>
                <option value=".fd">Front Desk</option>
                <option value=".wld">Welder</option>
                <option value=".mac">Machinist</option>
            </select>
        </div>
        <div name="job2-dropdown" id="job2-dropdown">
            <label for="job2">Job 2:</label>
            <select name="job2" id="job2">
                <option selected="selected" value="default">None</option>
                <option value=".mgr">Manager</option>
                <option value=".sl">Shift Lead</option>
                <option value=".fd">Front Desk</option>
                <option value=".wld">Welder</option>
                <option value=".mac">Machinist</option>
            </select>
        </div>
    </div>
</div>
<div class="access all-jobs" name="brk-rm" id="brk-rm">Break Room</div>
<div class="access all-jobs" name="first-aid" id="first-aid">First Aid Station</div>
<div class="access wld" name="wld-cab" id="wld-cab">Welding Equipment</div>
<div class="access mgr sl fd" name="cash-reg" id="cash-reg">Cash Register</div>
<div class="access mgr sl" name="clean" id="clean">Cleaning Supplies</div>
<div class="access sl mac" name="mach-st" id="mach-st">Machine Stations</div>
<div class="access mgr sl" name="keys" id="keys">Shop Keys</div>

CSS

.all-jobs {
    background-color: lightgreen;
    color: black;
}

.access-enabled {
    background-color: lightgreen;
    color: black;
}

JavaScript

$("select[name='job1']").change(function() {
    select_changed();
});

function select_changed() {
    jQuery("div[class*='access']").each(function() {
        jQuery(this).removeClass('access-enabled');
        console.log(this);
    });
    jQuery("select[name='job1']").each(function() {
        var selected = jQuery(this).val().split(' ');
        $.each(selected, function(index, value) {
            jQuery(value).addClass('access-enabled');
        });
        console.log(selected);
    });
}
    
$("select[name='job2']").change(function() {
    select_changed();
});

function select_changed() {
    jQuery("div[class*='access']").each(function() {
        jQuery(this).removeClass('access-enabled');
        console.log(this);
    });
    jQuery("select[name='job2']").each(function() {
        var selected = jQuery(this).val().split(' ');
        $.each(selected, function(index, value) {
            jQuery(value).addClass('access-enabled');
        });
        console.log(selected);
    });
}
解决方案

问题根源是重复定义了select_changed函数,第二个函数会覆盖第一个,导致第一个下拉框触发时,实际执行的是只处理第二个下拉框的逻辑。

修复后的JavaScript代码如下,合并逻辑同时处理两个下拉框的选中值:

// 给两个下拉框绑定同一个change事件
$("select[name='job1'], select[name='job2']").change(function() {
    select_changed();
});

function select_changed() {
    // 先移除所有区域的高亮类
    jQuery("div.access").removeClass('access-enabled');
    
    // 收集两个下拉框的选中值,排除default选项
    const selectedJobs = [];
    const job1Val = jQuery("select[name='job1']").val();
    if (job1Val !== "default") {
        selectedJobs.push(job1Val);
    }
    const job2Val = jQuery("select[name='job2']").val();
    if (job2Val !== "default") {
        selectedJobs.push(job2Val);
    }
    
    // 给对应岗位的区域添加高亮类
    selectedJobs.forEach(job => {
        jQuery(job).addClass('access-enabled');
    });
}

这段代码做了这些优化:

  • 统一给两个下拉框绑定事件,避免重复代码
  • 先清空所有区域的高亮状态
  • 同时获取两个下拉框的选中值,忽略"None"选项
  • 遍历选中的岗位,给对应区域添加高亮类

这样不管操作哪个下拉框,都会同时计算两个岗位的可访问区域,实现预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:05:34