javascript - 使用格式动态设置 select2 选项

标签 javascript jquery-select2 jquery-select2-4

Select2 v4.0 允许您通过创建新的 Option 对象并附加它们来动态地将选项添加到下拉列表中。如何动态添加不仅仅包含 id 和文本的数据?

更具体地说,如果 select2 使用 templateResult 配置来设置不仅仅是纯文本的数据样式,那么添加 Option 的限制性太大。此回调仅适用于库自己的数据格式。

$('#select2').select2({
    templateResult: function(data) {
        return data.text + ' - ' + data.count;
    }
});
$('#select2').append(new Option('Item', 1, false, false));

我想在打开下拉列表时添加更复杂的数据并对结果进行模板化。

我尝试了一些丑陋的解决方法,例如

var opt = new Option('Item', 1, false, false);
opt.innerHTML = '<div>Item</div><div>Count</div>';

但是 HTML 被删除并且 select2 显示纯文本。

最佳答案

该库的维护者表示不会对此功能提供任何支持,如 a closed Github issue 中所述。 。我发现的唯一合理的解决方法是在填充元素后重新初始化该元素:

function initSelect2(data) {
  var select = $('#select2');
  select.select2({
    templateResult: function(data) {
      return data.text + ' - ' + data.count;
  });
  if (data.length) {
    select.data('loaded', 1);
    select.select2('open');
  } else {
    select.on('select2.opening', fillSelect2);
}

function fillSelect2() {
  var select = $('#select2');
  if (select.data('loaded')) {
    return;
  }
  var data = [];
  var data.push({id: 1, text: 'One', count: 1});
  var data.push({id: 2, text: 'Two', count: 2});
  var data.push({id: 3, text: 'One', count: 3});
  initSelect2(data);
}

initSelect2();

关于javascript - 使用格式动态设置 select2 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46331484/

相关文章:

javascript - RequireJS:如何动态定义/添加包

javascript - 如何在 JSF <h :commandLink> action is performed? 之前执行 Javascript

jquery-select2 - 如何让 select2 下拉列表在最初打开时滚动到选择

jquery-select2-4 - 如何修改Select2 v4.0中的 "No Results Found"语言

javascript - SignalR 无法在 Chrome 上使用 WebSocket 连接到服务器

javascript - 如何更改 select2 中的占位符?

javascript - 添加图标到 select2 不基于值

javascript - jQuery Select2 在表 TR 中追加后不出现

javascript - select2 3.5和4.0冲突如何解决

javascript - 仅在一个 div 中禁用元视口(viewport)?