Select2 - 使用 JSON 作为本地数据

Posted

技术标签:

【中文标题】Select2 - 使用 JSON 作为本地数据【英文标题】:Select2 - use JSON as local data 【发布时间】:2013-08-12 06:02:34 【问题描述】:

我可以让它工作......

var options = [id: 1, text: 'Adair, Charles']  
$('#names').select2(
    data: options,
)

但我不知道如何从这里出发......

alert(JSON.stringify(request.names)) 给我...

["id":"1","name":"Adair,James",
"id":"2","name":"Anderson,Peter",
"id":"3","name":"Armstrong,Ryan"]

对于 Select2 将接受为本地数据的内容

【问题讨论】:

这个 Select2 是什么,你能解释一下吗? 选择2:ivaynberg.github.io/select2 【参考方案1】:

从本地数组加载数据

带有示例的jquery-select2 的网页包含使用Select2 的演示with local data (an array)

html

<input type="hidden" id="e10" style="width:300px"/>

javascript

$(document).ready(function()  

    var sampleArray = [id:0,text:'enhancement', id:1,text:'bug'
                       ,id:2,text:'duplicate',id:3,text:'invalid'
                       ,id:4,text:'wontfix'];

    $("#e10").select2( data: sampleArray );

);

如果数组没有文本属性,则选择2加载数据

对于您的问题,示例 e10_2 是相关的

<input type="hidden" id="e10_2" style="width:300px"/>

要实现您需要函数format(),如下所示:

$(document).ready(function()  

    // tell Select2 to use the property name for the text
    function format(item)  return item.name; ;

    var names = ["id":"1","name":"Adair,James"
             , "id":"2","name":"Anderson,Peter"
             , "id":"3","name":"Armstrong,Ryan"]

    $("#e10_2").select2(
            data: results: names, text: 'name' ,
            formatSelection: format,
            formatResult: format                        
    );

);

这是输出:

提示

要查看每个示例的源代码,最好使用 chrome 开发工具的网络选项卡,并在 javascript 启动之前查看 html 源代码。

【讨论】:

谢谢,我实际上遇到了 2 个错误,这让我很困惑,你指出的格式丢失了,还有 var names = jQuery.parseJSON(optionString);需要将 JSON 字符串转换为 select2 将使用的对象。再次感谢。 很高兴我能帮上忙。未来的提示:如果您有更多代码,最好将其包含在您的问题中。这有助于其他人更快地帮助您。此外,如果您有来自 chrome 开发工具的错误消息(请参阅我的个人资料以获取链接),最好也包含它们。 感谢您的提示,但我自己更像一个萤火虫人。 在哪里可以找到data 属性的键,例如resultsname 如果您的数组没有文本属性,您能否发布一个加载数据的工作小提琴?因为,即使在复制/粘贴您的代码之后,我也没有找到任何结果。【参考方案2】:

只是添加。这也对我有用:

HTML:

<select id="names" name="names" class="form-control"></select>

Javascript

$('#names').select2();

var options = $('#names');

$.each(sampleArray, function() 
    options.append($("<option />").val(this.id).text(this.name));
);

【讨论】:

【参考方案3】:

作为此旧帖子的更新,自 4.0.0+ 版本起不再直接支持 id 和 text 的自定义属性。

请参阅here“严格执行 id 和 text 属性”文本块。您必须创建一个 $.map 对象作为解决方法。

更重要的是,现在不推荐使用 [input type="hidden"],因为所有核心 select2 选项现在都支持 [select] html 对象。

也可以看看 John S 的回答 on this post。

【讨论】:

以上是关于Select2 - 使用 JSON 作为本地数据的主要内容,如果未能解决你的问题,请参考以下文章

Select2 从本地 json 文件加载数据

Select2 通过 AJAX 加载 JSON 结果集并在本地搜索

从 JSON 请求中自动选择 Select2:使用数据表编辑器

Select2.js v4.0:如何使用本地数组数据源设置默认选择值?

从 php 到 select2 的 json 响应未呈现

如何使用 Laravel 将数据加载到 Select2 中