Пометка с помощью AJAX в select2
Я делаю пометки с select2
У меня есть эти требования с select2:
- мне нужно найти некоторые теги с помощью select2 ajax
- также мне нужно использовать "теги" в select2, который позволяет значения, которые не находятся в списке(результат Ajax).
оба сценария работают независимо. Но вместе с AJAX значения заполняются только. Если мы введем любые другие значения не в списке, то он говорит :" нет совпадений найдено"
мой сценарий если пользователь вводит любое новое значение, которого нет в списке, позвольте им создать свой собственный тег.
любой способ сделать эту работу?
4 ответа:
Select2 имеет функцию "createSearchChoice":
создает новый выбираемый выбор из поискового запроса пользователя. Позволяет создание вариантов, недоступных с помощью функции запроса. Полезно, когда пользователь может создавать варианты на лету, например, для "пометки" usecase.
Вы можете достичь того, что вы хотите с помощью:
createSearchChoice:function(term, data) { if ($(data).filter(function() { return this.text.localeCompare(term)===0; }).length===0) { return {id:term, text:term}; } }, multiple: true
вот более полный ответ, который возвращает результат JSON в поиск ajax и позволяет создавать теги из термин, если термин не возвращает никаких результатов:
$(".select2").select2({ tags: true, tokenSeparators: [",", " "], createSearchChoice: function(term, data) { if ($(data).filter(function() { return this.text.localeCompare(term) === 0; }).length === 0) { return { id: term, text: term }; } }, multiple: true, ajax: { url: '/path/to/results.json', dataType: "json", data: function(term, page) { return { q: term }; }, results: function(data, page) { return { results: data }; } } });
выберите v4
http://jsfiddle.net/8qL47c1x/2/
HTML:
<select multiple="multiple" class="form-control" id="tags" style="width: 400px;"> <option value="tag1">tag1</option> <option value="tag2">tag2</option> </select>
JavaScript:
$('#tags').select2({ tags: true, tokenSeparators: [','], ajax: { url: 'https://api.myjson.com/bins/444cr', dataType: 'json', processResults: function(data) { return { results: data } } }, // Some nice improvements: // max tags is 3 maximumSelectionLength: 3, // add "(new tag)" for new tags createTag: function (params) { var term = $.trim(params.term); if (term === '') { return null; } return { id: term, text: term + ' (new tag)' }; }, });
выберите v3.5. 2
пример с некоторыми улучшениями:
html:
<input type="hidden" id="tags" value="tag1,tag2" style="width: 400px;">
js:
$('#tags').select2({ tags: true, tokenSeparators: [','], createSearchChoice: function (term) { return { id: $.trim(term), text: $.trim(term) + ' (new tag)' }; }, ajax: { url: 'https://api.myjson.com/bins/444cr', dataType: 'json', data: function(term, page) { return { q: term }; }, results: function(data, page) { return { results: data }; } }, // Take default tags from the input value initSelection: function (element, callback) { var data = []; function splitVal(string, separator) { var val, i, l; if (string === null || string.length < 1) return []; val = string.split(separator); for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]); return val; } $(splitVal(element.val(), ",")).each(function () { data.push({ id: this, text: this }); }); callback(data); }, // Some nice improvements: // max tags is 3 maximumSelectionSize: 3, // override message for max tags formatSelectionTooBig: function (limit) { return "Max tags is only " + limit; } });
JSON:
[ { "id": "tag1", "text": "tag1" }, { "id": "tag2", "text": "tag2" }, { "id": "tag3", "text": "tag3" }, { "id": "tag4", "text": "tag4" } ]
обновлено 2015-01-22:
исправить jsfiddle: http://jsfiddle.net/X6V2s/66/
обновлено 2015-09-09:
С Select2 v4.0.0+ стало легче.
выбрать В4.0.0
https://jsfiddle.net/59Lbxvyc/
HTML:
<select class="tags-select" multiple="multiple" style="width: 300px;"> <option value="tag1" selected="selected">tag1</option> <option value="tag2" selected="selected">tag2</option> </select>
JS:
$(".tags-select").select2({ // enable tagging tags: true, // loading remote data // see https://select2.github.io/options.html#ajax ajax: { url: "https://api.myjson.com/bins/444cr", processResults: function (data, page) { return { results: data }; } } });