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

jQuery each()循环追加Option仅最后一个select2元素生效如何解决

问题原因

你在循环外仅创建了1个独立的Option DOM节点,原生DOM规则里,同一个DOM节点同一时间只能挂载在一个父节点下。
每次循环执行append(newOption)操作时,浏览器会先把这个Option节点从之前挂载的select元素中移除,再插入到当前遍历到的select里。循环全部执行完成后,这个Option节点自然只会留在最后一个遍历到的select元素中,表现出来就是只有最后一个select2成功追加了选项。

修复方案

不要在循环外复用同一个Option实例,改为在每次循环内部为当前select创建全新的独立Option节点即可,修正后的代码如下:

$('select[name="grupa_cechy_id"]').each(function () {
    // 每次循环生成独立的Option节点,避免节点被移动
    const newOption = new Option(model.nazwa, model.id, false, false);
    $(this).append(newOption).trigger('change');
    // 遍历校验逻辑
    let idx = $(this).attr('id');
    console.log(idx);
});

补充说明:如果你使用的是Select2 4.x及以上版本,也可以直接调用Select2官方提供的选项追加方法,不需要手动触发change事件,核心逻辑同样需要保证每个select对应独立的Option节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:33:11