如何在select2 multi select中预选值?

我有这样的多重选择:

 Apple Mango Orange  

现在,除了必须在选择框中选择的那些选项之外,我还想要额外的ajaxfunction,它可以从远程源提供值。

这是我的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 }); }); }); 

但是我收到了错误:

错误:当连接到元素时,Select2不允许选项’id’。

但是当我使用 ,我应该在哪里保留预先选择的选项? 当select2框出现时,如何显示它们?

如果您只有值,那么您可以使用'val'来获得这样的预选值。

 var PRESELECTED_FRUITS = [ '1','2','3']; $('.myList').select2({}).select2('val', PRESELECTED_FRUITS); 

您可以使用“数据”function来设置初始值:

 var PRESELECTED_FRUITS = [ { id: '1', text: 'Apple' }, { id: '2', text: 'Mango' }, { id: '3', text: 'Orange' } ]; $('.myList').select2('data', PRESELECTED_FRUITS) 

注意:“val”函数是设置初始值的另一种方法,但您只能使用该函数指定ID。 在这种情况下,您必须提供一个“initSelection”函数,该函数从id构建对象。

另请注意,“id”选项不是强制您使用隐藏输入的唯一选项。 您也不能将“ajax”选项与select元素一起使用。

至于“id”选项,我认为你不需要它。 只需将逻辑放在ajax“results”函数中,这样就可以构建一个具有正确idtext属性的对象数组,或让服务器返回具有这些属性的对象。

jsfiddle演示

要预设值,请使用’val’属性预设选定的值。

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

但为什么不删除’id’function呢? 如果可能,您可以从服务器返回正确的“id”,而无需id函数。