简体   繁体   English

如何在 select2 multi select 中预选值?

[英]How to pre-select values in select2 multi select?

I am having a multiple select like this:我有一个像这样的多个 select:

<select multiple="multiple" class="myList">
        <option value="1" selected="selected">Apple</option>
        <option value="2" selected="selected">Mango</option>
        <option value="3" selected="selected">Orange</option>
</select>

Now, apart from those options which must come selected in the select box, I wanted additional ajax functionality which would give values from a remote source.现在,除了必须在 select 框中选择的那些选项外,我还想要额外的 ajax 功能,这些功能将从远程源提供值。

Here is my code for select2这是我的 select2 代码

$(function(){
    $(".myList").each(function(){

                $(this).select2({
                placeholder: "Search for fruits",
                minimumInputLength: 2,
                multiple: true,
                id: function(e) { 
                return e.id+":"+e.name; },
                ajax: {
                    url: "https://localhost:8443/fruit_search",
                    dataType: 'json',
                    data: function(term, page) {
                        return {
                            q: term
                        };
                    },
                    results: function(data, page) {
                    var frts=[];
                        $.each(data,function(idx,Frt){
                            frts[frts.length]=Frt;
                        });
                        return {
                            results: frts
                        };
                    }
                },
                initSelection: function(element, callback) {
                    var data = [];
                },
                formatResult: formatResult,
                formatSelection: formatSelection
                });
        });

});

But I am getting the error:但我收到错误:

Error: Option 'id' is not allowed for Select2 when attached to a <select> element.错误:附加到<select>元素时,Select2 不允许选项“id”。

But when I use <input type="hidden"> then where should I keep the pre-selected options?但是当我使用<input type="hidden">时,我应该在哪里保留预选选项? How do I show them up when the select2 box appears?出现 select2 框时如何显示它们?

If you only have values then you can use 'val' to get pre-selected values like this. 如果您只有值,那么您可以使用'val'来获得这样的预选值。

var PRESELECTED_FRUITS = [ '1','2','3'];

$('.myList').select2({}).select2('val', PRESELECTED_FRUITS);  

You can use the "data" function to set the initial values: 您可以使用“数据”功能来设置初始值:

var PRESELECTED_FRUITS = [
    { id: '1', text: 'Apple' },
    { id: '2', text: 'Mango' },
    { id: '3', text: 'Orange' }
];

$('.myList').select2('data', PRESELECTED_FRUITS)

Note: The "val" function is another way to set the initial values, but you only specify the ids with that function. 注意:“val”函数是设置初始值的另一种方法,但您只需使用该函数指定ID。 In that case you would have to supply an "initSelection" function that builds the objects from the ids. 在这种情况下,您必须提供一个“initSelection”函数,该函数从ID构建对象。

Also note that the "id" option is not the only option that is forcing you to use a hidden input. 另请注意,“id”选项不是强制您使用隐藏输入的唯一选项。 You cannot use the "ajax" option with a select element either. 您也不能将“ajax”选项与select元素一起使用。

As for the "id" option, I don't think you need it. 至于“id”选项,我认为你不需要它。 Just put logic in the ajax "results" function so it builds an array of objects that have the proper id and text properties, or have the server return objects with those properties. 只需将逻辑放在ajax“results”函数中,这样就可以构建一个具有正确idtext属性的对象数组,或让服务器返回具有这些属性的对象。

jsfiddle demo jsfiddle演示

To preset values use the 'val' property to preset the selected values. 要预设值,请使用“val”属性预设选定的值。

$(this).select2({
            val: ["1","2","3"]
    }

But why not remove the 'id' function? 但为什么不删除'id'功能呢? If possible you could return the correct 'id' from the server without the need of the id function. 如果可能,您可以从服务器返回正确的“id”,而无需id函数。

$('select').select2({
    multiple: true,
    data: [
        {id: 1, text: 'Foo', selected: true},
        {id: 2, text: 'Bar', selected: true}
    ]
})

You can also load the values into the HTML: 您还可以将值加载到HTML中:

<select class="selector" multiple="multiple" >
    <option selected value="1">Apple</option>
    <option selected value="2">Mango</option>
    <option selected value="3">Orange</option>
</select>

And connect select2 to it: 并将select2连接到它:

$(".selector").select2({
    width: 'inherit',
    minimumInputLength: 2,
    minimumResultsForSearch: 10,
    placeholder: "Search for fruits",
    ajax: {
        delay: 1000,
        url: "/bla_foo",
        dataType: 'json',
        type: "GET",
    }
})

and select2 will prefill the form. 和select2将预填表格。

$("#select2").select2('data', {id: '3', text: 'myText'});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM