Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
58
rated 0 times [  61] [ 3]  / answers: 1 / hits: 29457  / 10 Years ago, thu, march 13, 2014, 12:00:00

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


More From » php

 Answers
12

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.


[#72005] Wednesday, March 12, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
yaquelina

Total Points: 517
Total Questions: 101
Total Answers: 96

Location: Egypt
Member since Tue, Jul 6, 2021
3 Years ago
yaquelina questions
;