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

bootstrap-select v1.13.18:仅optgroup选项可多选的实现方案咨询

实现Bootstrap-select的分组选项特殊多选逻辑

Bootstrap-select v1.13.18没有内置支持这种特殊多选规则的配置项,需要自行编写JavaScript逻辑来实现需求。

第一步:修正HTML结构

注意<optgroup>标签不支持multiple属性,该属性需要添加到<select>标签上,调整后的代码如下:

<select class="selectpicker" data-container="body" id="levels" multiple>
  <option value="1">My tasks</option>
  <optgroup id="departments" label="Departments tasks:">
    <option value="8">Service</option>
    <option value="1">Production</option>
  </optgroup>
  <option value="3" selected>All tasks</option>
</select>

第二步:编写自定义逻辑

通过监听Bootstrap-select的changed.bs.select事件,处理不同选项的选中规则:

$('#levels').on('changed.bs.select', function(e, clickedIndex, isSelected, previousValue) {
  const $select = $(this);
  const $allOptions = $select.find('option');
  const clickedOption = $allOptions.eq(clickedIndex);
  const isGroupOption = clickedOption.parent('optgroup').length > 0;

  if (isSelected) {
    if (!isGroupOption) {
      // 选中非分组选项:清空所有其他选项的选中状态
      $allOptions.not(clickedOption).prop('selected', false);
    } else {
      // 选中分组内选项:清空所有非分组选项的选中状态
      $allOptions.not('optgroup > option').prop('selected', false);
    }
  }

  // 刷新选择器UI,确保状态同步
  $select.selectpicker('refresh');
});

逻辑说明

  • 当选中非<optgroup>下的选项时,自动取消所有其他选项(包括分组内的选项)的选中状态,保证仅当前非分组选项被选中
  • 当选中**<optgroup>下的选项**时,自动取消所有非分组选项的选中状态,但保留其他分组内已选中的选项,支持分组内/跨分组的多选
  • 每次状态变更后调用selectpicker('refresh'),确保选择器UI与实际选中状态同步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:50:19