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

如何禁用同名所有select中特定值的option选项?

实现select选项变更后禁用同组所有select的对应值选项

初始HTML结构

<select id="slctDat1" name="slctDat1" class="form-select">
      <option value="1">Text1</option>
</select>

<select id="slctDat2" name="slctDat2" class="form-select">
      <option value="1">Text1</option>
</select>

需求说明

当任意一个上述select的选项发生变更(onchange事件触发)时,获取当前选中的值,禁用所有同组select中该值对应的option,最终效果如下:

<select id="slctDat1" name="slctDat1" class="form-select">
      <option value="1" selected disabled>Text1</option>
</select>

<select id="slctDat2" name="slctDat2" class="form-select">
      <option value="1" disabled>Text1</option>
</select>

解决方案(jQuery实现)

// 绑定change事件到所有name以slctDat开头的select
$('select[name^="slctDat"]').on('change', function() {
    // 获取当前选中的值
    const selectedVal = $(this).val();
    
    // 重置所有option的禁用状态,避免旧状态干扰新选择
    $('select[name^="slctDat"] option').prop('disabled', false);
    
    // 收集所有已选中的有效值
    const selectedValues = $('select[name^="slctDat"]')
        .map(function() { return $(this).val(); })
        .get()
        .filter(val => val !== null);
    
    // 遍历所有option,禁用已被选中的值对应的选项
    $('select[name^="slctDat"] option').each(function() {
        if (selectedValues.includes($(this).val())) {
            $(this).prop('disabled', true);
        }
    });
    
    // 确保当前select的选中项保持选中状态
    $(this).find(`option[value="${selectedVal}"]`).prop('selected', true);
});

// 页面加载完成后触发一次change事件,处理初始选中项
$(document).ready(function() {
    $('select[name^="slctDat"]').trigger('change');
});

代码说明

  • 使用name^="slctDat"选择器匹配所有name以slctDat开头的select,适配你实际的name命名规则
  • 每次变更时先重置所有option的禁用状态,保证用户切换选项时,之前禁用的选项可以重新启用
  • 收集所有已选中的值,处理多个select同时存在选中项的场景
  • 遍历所有option,批量禁用对应已选中值的选项
  • 页面加载时触发一次change事件,确保初始状态符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:07:34