I have two examples.
This one is with a normal select2 with static inputs which works with default fields beforehand: http://jsfiddle.net/z96Ca/2/
Next is a select2 with an ajax call and the default values are not being added into the box - why?! http://jsfiddle.net/z96Ca/1/
I've been fiddling for a while but can't work out how to add the values beforehand when there's an ajax call as well.
Here's the line that usually adds the code beforehand:
$(test).val(["test1","test2"]).trigger("change");
Hope I'm clear enough
Thanks a lot
select2({ ajax: { url: "/admin/api/transactions/creditorlist", dataType: 'json', delay: 250, data: function (params) { return { q: params. term, c_id: initial_creditor_id, page: params.
$("#programid"). select2({ placeholder: "Select a Program", allowClear: true, minimumInputLength: 3, ajax: { url: "ajax.
Select2 jQuery plugin is easy to add on the <select > element. Need to call the select2() method on the selector to initialize. If you adding select2 on a class or select element and when you add an element dynamically then select2 is not initialized on that element.
Since you are backing your Select2 with an input element, rather than a select element, and it allows multiple selection, I believe you need to define an initSelection
function.
Add the following option:
initSelection: function (element, callback) {
callback($.map(element.val().split(','), function (id) {
return { id: id, text: id };
}));
}
jsfiddle
Note: Instead of calling the following:
$(test).val(["test1","test2"]).trigger("change");
You could have called this:
$(test).select2('val', ["test1","test2"], true);
And when you do that without defining an initSelection
function, you get the following error:
Error: Error: val() cannot be called if initSelection() is not defined
Note: I think the reason your first (non-ajax) example works without defining an initSelection
function is because it specifies the tags
option.
UPDATE: Select2 v4
When using Select2 v4, you should always back the Select2 control with a <select>
element, not a hidden input.
<select id="test" style="width: 300px;" multiple="multiple">
</select>
Note: You can still specify multiple: true
in the options, but you can also use the multiple
attribute of the <select>
element.
You can set default values by including selected options in the html or by programmatically adding selected options to the <select>
element, after which you should trigger a change-event on the element so its display is updated.
$test.append('<option value="initial1" selected="selected">initial1</option>');
$test.append('<option value="initial2" selected="selected">initial2</option>');
$test.trigger('change');
In this case, the initSelection
function is no longer needed (or allowed).
jsfiddle
Note: Select2 does have a "full" version which supports some backward compatibility. That may also be an option.
There is no initSelection in the newer versions of select2.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With