【问题标题】:Get items from Select2 after data has been loaded加载数据后从 Select2 获取项目
【发布时间】:2015-09-01 15:35:48
【问题描述】:

我正在尝试强制打开方法并像这样使用 select2 选择项目。

    $(".select").select2('open')
    $(".select").on('select2-loaded', function (e) {
        items = e.items.results;
        if (items.length == 1) {
            $(this).val(items[0].text);
        }
    });
    $(".select").select2('close');

但我无法进入 select2-loaded 评估,并且关闭也很快发生。如果列表中只有一个元素,我想默认选择第一个元素。

当“打开”发生时,它会自动执行获取和加载列表中所有元素的机制。如果我注释 close 方法,则显示列表中的元素需要几毫秒。

但我想要的是刷新我的列表(这是通过打开来完成的)然后我只想选择只有一个元素并关闭我的列表('select')

我怎样才能做到这一点?此行为将由另一个列表的 onchange 事件触发。 (嵌套选择)

【问题讨论】:

  • 您使用的是哪个版本的 select2?
  • 这个:select2-3.5.1

标签: javascript jquery jquery-select2


【解决方案1】:

您应该将close 调用移动到select2-loaded 事件内,这样它只会在选择项目后关闭选择元素。否则,您正在打开,为将来的事件设置事件,然后立即关闭。

$(".select").select2('open')
$(".select").on('select2-loaded', function (e) {
    items = e.items.results;
    if (items.length == 1) {
        $(this).val(items[0].text);
        $(".select").select2('close');
    }
});

【讨论】:

  • 感谢您的回答。这会加载我的选择列表,然后如果只有一个元素,则自动选择该元素,然后关闭列表。但是,每当我单击被另一个过滤的相同选择时,它都不允许再次打开它,无论它是否具有一个元素或多个元素。它总是关闭选择。你知道如何避免这种行为吗?无论我何时单击选择,它都会引发 select2-loaded 并结束关闭。我想区分选择何时被另一个选择过滤或当我点击它时。
  • 你是对的。我已经编辑了我的答案并将关闭移动到 if (..==1) 语句中,所以它只会在只有 1 项时关闭。
  • 我已经这样做了。但是现在,如果有多个元素,它永远不会关闭并保持打开状态。这个想法是设置值,我称之为“打开”,因为该方法引发了刷新选择数据的操作。也许还有另一种方式来刷新数据(类似于open),并在需要时选择值。
  • 基于this,您可以尝试在open之后添加以下行:$(".select").select2({ data: fromAccountData });
猜你喜欢
  • 2020-09-09
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
相关资源
最近更新 更多