Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
18
rated 0 times [  21] [ 3]  / answers: 1 / hits: 19806  / 11 Years ago, wed, august 14, 2013, 12:00:00

Select2 supports disabled options when it is initialized on a <select> tag, as discussed in this issue



However, I can't find how to achieve the same result with remote data.
Do I need to use a custom format function? How do I prevent the user from selecting it then?
Or is this built-in somewhere?



Thanks!


More From » jquery

 Answers
32

In Select2 3.4.2 you just need to add a disabled: true property to the given result object. Practical example with a query function:



$('input').select2({
query: function(query) {
//do ajax call which retrieves the results array in this format:
var data = {results: [
{ id: 1, text: 'disabled option', disabled: true },
{ id: 1, text: 'hi' }
]};
//pass it to the query callback inside your Ajax callback:
query.callback(data);
}
});


Demo






The same can be done using the ajax wrapper, which accepts a result objects array in the same format as the query function.



Here's a demo with an actual Ajax call (through jsFiddle's JSON API):



$('input').select2({
ajax: {
url: '/echo/json/',
dataType: 'json',
params: {
method: 'post'
},
data: function (term, page) {
// Data to be sent to the server. Usually it is just the term
// parameter (and page if using pagination).
// However, since this API simply echoes back what we send,
// I'll build the results array here
var resultsArr = [];
for (var i = 0; i < 10; i++) {
resultsArr.push({
id: i,
text: 'opt'+i,
//randomly disable a couple options for demo purposes
disabled: Math.random() < .3
});
}
return {
json: JSON.stringify(resultsArr)
}
},
results: function(data, page) {
//data param === received response from the server. As dataType
//is json, jQuery automatically parses the response into an object.
//So, in this case, we received the resultsArr that we sent.
//Now return it in the correct format: { results: resultsArr }
return { results: data };
}
}
});


Demo



Remember that the data function in this last example is just to properly use the jsFiddle API - you should keep your original data function which sends the query term. All you have to do is modify the response so that the result objects include a disabled: true property in the results that you want to be disabled, in the same format as the first example.


[#76367] Monday, August 12, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
havenbilliec

Total Points: 324
Total Questions: 106
Total Answers: 94

Location: Pitcairn Islands
Member since Fri, Oct 15, 2021
3 Years ago
;