【问题标题】:Programmatically selecting option(s) on AJAX sourced Select2在 AJAX 来源的 Select2 上以编程方式选择选项
【发布时间】:2016-09-06 23:23:44
【问题描述】:

我正在使用 Select2 jQuery 插件 (v4.0.3) 来处理我正在进行的项目。 select2 实例是 ajax 来源的,我想知道是否有一种方法可以以编程方式选择选项。

我之前可以通过以下方式设置值:

$('#input-field').val(['123','456']).trigger('change')

当它不是 ajax 来源时。现在我需要使用 ajax 来源的 Select2 实例来实现它。

我创建了一个 jsFiddle 实例,以便您明白我的意思。单击 Set Values 应该会在 select2 实例中选择 2 个值。

谢谢!

PS我什至尝试将tags 选项设置为true,因此可以选择任何值(即使它不是来自 AJAX 查询的结果),但它仍然不起作用

【问题讨论】:

  • 看起来您的 ajax 调用没有得到正确的值,但是当清除 select2 框并单击“设置值”链接时一切正常。

标签: javascript jquery ajax select2


【解决方案1】:

您似乎无法以编程方式选择以前未从下拉列表中搜索和选择的内容。

当使用 AJAX 数据时,Select2 似乎通过在发现它们时将以前未知的选项添加到基础select 元素来工作。 .val() 正在尝试添加您想要的项目,但只能添加已经存在的项目,其余的将被忽略。 Select2 然后获取change 事件并相应地调整渲染。

这至少应该给你一个有用的方向:

$('#set-selected').click(function(e){
  e.preventDefault();
  var $select = $('.js-data-example-ajax');
  var targets = ["28200583","3620194"];
  targets.forEach(function(v,i,a){
    if(!$('option[value='+v+']',$select).length) {
      $select.append('<option value="'+v+'">'+v+'</option>');
    }
  });
  $select.val(targets).trigger('change');
});

通常,这些 UI 库的情况是您以与初始化控件相同的方式操作控件,在这种情况下通过调用 .select2()。但是,在这种情况下,我无法找到可以满足您需要的那种形式的命令。

【讨论】:

  • 昨晚我再次处理这个问题时得出了同样的结论。我在上面发现了一个 GIT 问题。我认为这是沿着这些思路的东西,只是希望 Select2 插件足够酷,可以对传递给 $.val() 调用的值发出 AJAX 请求,但这也同样有效。谢谢!
猜你喜欢
  • 2016-09-12
  • 2014-09-27
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
相关资源
最近更新 更多