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

带optgroup标签的多选下拉框无法获取选中option值问题

问题原因

你代码出错的核心是option元素的父节点不是固定为select:添加optgroup标签后,option的直接父节点是<optgroup>元素,而非外层的<select>,所以this.parentNode拿到的是optgroup对象,它没有options属性,自然遍历失败。

修正方案

直接定位到option所属的外层select元素即可,不用通过parentNode递归查找,两种实现方式都可以:

原生JS写法修正

$('#mydropdown option').click(function(evt) {
  var selectedOption = evt.target;
  // 直接查找最近的外层select元素,兼容有无optgroup的场景
  var dropdown = this.closest('select');
  queue.add(selectedOption.value);
  Array.from(dropdown.options).forEach(function(option) {
    if (!option.selected) {
      queue.remove(option.value);
    }
  });
});

更精简的jQuery实现(推荐)

既然已经引入了jQuery,直接用内置方法获取选中值更简单,不需要自己遍历options:

// 直接监听select的change事件,比监听option的click兼容性更好,覆盖键盘操作选中的场景
$('#mydropdown').on('change', function() {
  // 多选模式下会直接返回所有选中项的value组成的数组,自动兼容带optgroup的结构
  const selectedValues = $(this).val();
  // 同步更新queue即可
  queue.clear();
  selectedValues.forEach(val => queue.add(val));
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:15:05