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
相关产品推荐
相关产品推荐

