Select2 仅按 id 设置选定值

Posted

技术标签:

【中文标题】Select2 仅按 id 设置选定值【英文标题】:Select2 set selected value by id only 【发布时间】:2013-10-23 07:07:22 【问题描述】:

所以,我有搜索 wtform,其中一个字段用 select2 表示。它通过 ajax 依赖于另一个选择字段加载。加载步骤工作正常。但是,当我提交表单并收到结果数据时,我无法将所选值设置回 select2 字段,因为我只有 id,而且据我所知,initSelection 的回调方法需要 id 和文本。或者,也许我做错了什么。

这里是选择字段

$("#source").select2(
    placeholder: "Выберите источник",
    initSelection: function(element, callback)
        callback(id: element.val(), text:element.val())
    ,
    query: function(query)
        query.callback(source_data)
    
)

我想要下面的东西。 select2 中已经存在这种 id 的数据,唯一的问题是如何选择它。

callback(id: element.val())

【问题讨论】:

element.val() 应该仍然在回调函数的范围内,所以你应该能够将它作为参数传递,不是吗? 并删除 () ?回调(id:element.val) element.val() 给了我 id,如果我只在回调方法中使用它,我会得到“未定义”文本作为选定值。 试试 $(element).select2('val', element.val()); 试过了。首先,我不能在没有定义 initSelection 的情况下调用 select2("val", value)。我认为这是因为我正在触发此选择的事件以实现依赖项。即使我删除触发器它也不起作用。 【参考方案1】:

这就是我能够解决这个问题的方法:

//sample preloaded select data
var preload_data = [id: '1', text:'<span id="user1">John</span>',id: '2', text:'<span id="user2">Tim</span>', id: '3', text:'<span id="user3">George</span>']

//the initSelection method
initSelection : function (element, callback) 
    var data = [];

    var lookup = ;
    for (var i = 0, len = preload_data.length; i < len; i++) 
        lookup[preload_data[i].id] = preload_data[i];
    
    $(element.val().split(",")).each(function() 
        data.push(id: this, text: lookup[this].text);
    );
    callback(data);

【讨论】:

以上是关于Select2 仅按 id 设置选定值的主要内容,如果未能解决你的问题,请参考以下文章

无法在编辑模式下设置多个选定值 select2

如何设置 jQuery Select2 的选定值?

如何为多个下拉菜单设置 jquery select2 的选定值?

获取select2中选定选项的值,然后使用jquery将值设置为输入文本?

淘汰赛和 Select2 获得选定的对象

在 C# 的 asp.net 下拉列表中的 select2 上设置多个选定值