Подтвердить что ты не робот

Как получить выбранный текст из select2 при использовании <input>

Я использую элемент управления select2, загружать данные через ajax. Для этого требуется использовать тег <input type=hidden..>.

Теперь я хочу получить выделенный текст. (Свойство value в выражении data-bind соответствует только id)

Я пробовал $(".select2-chosen").text(), но это прерывается, когда у меня есть несколько элементов управления select2 на странице.

4b9b3361

Ответ 1

Как и в случае 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 Получает или задает выбор. Аналогично валу, но работает с объектами вместо ids.

метод данных, вызываемый при однократном выборе с неустановленным значением, вернется null, в то время как метод данных, вызываемый при пустом мультивыборке, вернется [].

Ответ 2

Я, наконец, понял это:

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);

Ответ 3

Также вы можете получить выбранное значение, используя следующий код:

alert("Selected option value is: "+$('#SelectelementId').select2("val"));

Ответ 4

Снова я предлагаю Simple and Easy

Его работа Perfect с 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);
 });

Ответ 5

В приведенном ниже коде также решается иначе

.on("change", function(e) {

  var lastValue = e.currentTarget.value;
  var lastText = e.currentTarget.textContent;

 });

Ответ 6

Правильный способ сделать это с v4:

$('.select2-chosen').select2('data')[0].text

Он не документирован, поэтому может быть прерван в будущем без предупреждения.

Вероятно, вы захотите проверить, есть ли выбор:

var s = $('.select2-chosen');

if(s.select2('data') && !!s.select2('data')[0]){
    //do work
}