If you are using a templateSelection and ajax, some of these other answers may not work. It seems that creating a new option
element and setting the value
and text
will not satisfy the template method when your data objects use other values than id and text.
Here is what worked for me:
$("#selectElem").select2({
ajax: { ... },
data: [YOUR_DEFAULT_OBJECT],
templateSelection: yourCustomTemplate
}
Check out the jsFiddle here: https://jsfiddle.net/shanabus/f8h1xnv4
In my case, I had to processResults
in since my data did not contain the required id
and text
fields. If you need to do this, you will also need to run your initial selection through the same function. Like so:
$(".js-select2").select2({
ajax: {
url: SOME_URL,
processResults: processData
},
data: processData([YOUR_INIT_OBJECT]).results,
minimumInputLength: 1,
templateSelection: myCustomTemplate
});
function processData(data) {
var mapdata = $.map(data, function (obj) {
obj.id = obj.Id;
obj.text = '[' + obj.Code + '] ' + obj.Description;
return obj;
});
return { results: mapdata };
}
function myCustomTemplate(item) {
return '<strong>' + item.Code + '</strong> - ' + item.Description;
}