Как получить выделенный текст из select2 при использовании
я использую элемент управления select2,загрузка данных через ajax. Это требует использования <input type=hidden..>
тег.
теперь, я хочу получить выделенный текст. (Тег value
собственность в data-bind
выражение sotres the id
только)
Я пробовал $(".select2-chosen").text()
, но это ломается, когда у меня есть несколько элементов управления select2 на странице.
7 ответов:
по состоянию на Select2 4.x, он всегда возвращает массив, даже для не-нескольких списков выбора.
var data = $('your-original-element').select2('data') alert(data[0].text); alert(data[0].id);
Для Select2 3.X и ниже
одиночный выбор:
var data = $('your-original-element').select2('data'); if(data) { alert(data.text); }
обратите внимание, что когда нет выбора, переменная 'data' будет null.
Multi select:
var data = $('your-original-element').select2('data') alert(data[0].text); alert(data[0].id); alert(data[1].text); alert(data[1].id);
от 3.x docs:
data получает или задает выбор. Аналогично методу val, но работает с посторонними предметами вместо идентификационная карточка.
метод данных вызывается на одном-select с неназначенным значением вернет null, в то время как метод данных, вызванный на пустой множественный выбор, возвратит [].
Я, наконец, понял это, делая это:
var $your-original-element = $('.your-original-element'); var data = $your-original-element.select2('data')[0]['text']; alert(data);
Если вы хотите значение:
var value = $your-original-element.select2('data')[0]['id']; alert(value);
также вы можете иметь выбранное значение, используя следующий код:
alert("Selected option value is: "+$('#SelectelementId').select2("val"));
снова я предлагаю простой и легкий
его работа идеально подходит с ajax, когда поиск пользователя и выберите его сохраняет выбранную информацию через ajax
$("#vendor-brands").select2({ ajax: { url:site_url('general/get_brand_ajax_json'), dataType: 'json', delay: 250, data: function (params) { return { q: params.term, // search term page: params.page }; }, processResults: function (data, params) { // parse the results into the format expected by Select2 // since we are using custom formatting functions we do not need to // alter the remote JSON data, except to indicate that infinite // scrolling can be used params.page = params.page || 1; return { results: data, pagination: { more: (params.page * 30) < data.total_count } }; }, cache: true }, escapeMarkup: function (markup) { return markup; }, // let our custom formatter work minimumInputLength: 1, }).on("change", function(e) { var lastValue = $("#vendor-brands option:last-child").val(); var lastText = $("#vendor-brands option:last-child").text(); alert(lastValue+' '+lastText); });
приведенный ниже код также решает иначе
.on("change", function(e) { var lastValue = e.currentTarget.value; var lastText = e.currentTarget.textContent; });
правильный способ сделать это с v4:
$('.select2-chosen').select2('data')[0].text
Он недокументирован, поэтому может сломаться в будущем без предупреждения.
вы, вероятно, захотите проверить, есть ли выбор первым, однако:
var s = $('.select2-chosen'); if(s.select2('data') && !!s.select2('data')[0]){ //do work }