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

Bootstrap Dual Listbox动态添加选项后无法移动的问题求助

解决Bootstrap Dual Listbox动态添加选项后无法互移的问题

问题根源在于Bootstrap Dual Listbox插件是在初始化阶段对当前存在的<option>元素绑定交互事件、生成双列表UI的。通过Ajax动态添加的选项不会被插件自动识别,因此需要手动触发插件的刷新或重新初始化操作。

方案1:初始化后保存实例,动态添加选项后调用refresh方法

先初始化插件并保存实例引用,Ajax请求完成后更新选项,再调用插件的refresh方法同步UI和事件:

// 页面加载时初始化双列表,保存实例
var dualListboxInstance = $('.your-select-class').bootstrapDualListbox({
  // 你的插件配置项,按需设置
  nonSelectedListLabel: '待选选项',
  selectedListLabel: '已选选项'
});

// Ajax请求动态获取选项
$.ajax({
  url: '/your-data-api',
  method: 'GET',
  success: function(optionsData) {
    var $select = $('.your-select-class');
    // 清空原有选项(可选,根据需求决定)
    $select.empty();
    // 循环添加新选项
    optionsData.forEach(function(item) {
      $select.append(`<option value="${item.value}">${item.text}</option>`);
    });
    // 刷新双列表,让插件识别新选项
    dualListboxInstance.bootstrapDualListbox('refresh');
  }
});

方案2:Ajax完成后再初始化插件

如果页面加载时没有初始选项,完全依赖Ajax获取数据,可将插件初始化逻辑放在Ajax的成功回调中:

$.ajax({
  url: '/your-data-api',
  method: 'GET',
  success: function(optionsData) {
    var $select = $('.your-select-class');
    $select.empty();
    optionsData.forEach(function(item) {
      $select.append(`<option value="${item.value}">${item.text}</option>`);
    });
    // 此时所有选项已加载完成,初始化插件
    $select.bootstrapDualListbox({
      nonSelectedListLabel: '待选选项',
      selectedListLabel: '已选选项'
    });
  }
});

特殊情况处理(旧版本插件)

如果使用的插件版本不支持refresh方法,可先销毁现有实例再重新初始化:

// 销毁旧实例
dualListboxInstance.bootstrapDualListbox('destroy');
// 重新初始化
dualListboxInstance = $('.your-select-class').bootstrapDualListbox();

注意事项

  • 确保选择器(.your-select-class)准确指向目标<select>元素
  • 确认Ajax返回的optionsData是包含value和text字段的数组(或符合你业务需求的结构)
  • 若需要默认选中部分动态选项,可在添加<option>时加上selected属性,再执行刷新/初始化操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:56:45