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

Select2下拉菜单动态启用禁用选项功能异常问题求助

问题原因

Select2初始化完成后会生成一套独立的下拉选项渲染DOM,与原生<select>的<option>节点相互分离。只有主动触发Select2的选项刷新动作时,它才会重新读取原生<option>的最新属性(比如禁用状态、文本、取值等)同步到渲染层。
现有代码仅触发了change事件,该事件仅用于通知Select2「选中值发生变更」,不会触发选项列表的状态同步:

  • 未点开过下拉框时,Select2还未生成渲染缓存,下次点开时会主动读取一次原生<option>的状态,因此修改可以正常生效
  • 已点开过一次下拉框时,渲染缓存已经生成,后续未主动触发刷新的前提下,Select2会一直沿用旧的缓存状态,因此修改原生<option>的disabled属性看不到效果
修复方案

修改DeleteRow函数,将触发change事件替换为触发Select2的select2:refresh事件,强制它同步原生<option>的最新状态即可:

function DeleteRow(sender) {
        var taskId = $(sender).parent().parent().attr("task-id");
        var option = $('#add-task-select').find('option[value="' + taskId + '"]');
        option.prop('disabled', false);
        // 触发select2刷新选项列表,同步原生option的最新状态
        $('#add-task-select').trigger('select2:refresh');
        $(sender).parent().parent().remove();
}

如果上述写法在你使用的Select2版本中不生效,也可以使用调用refresh方法的写法:

$('#add-task-select').select2('refresh');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:18:01