Jquery Select2, как получить доступ к данным ajax при включении (изменении) функции?

Я использую Select2 с ajax. Все работает нормально, когда пользователь нажимает на нужный элемент, я использую функцию on(change), как указано в документации, для выполнения некоторых действий.

  $("#e6").on("change", function(e) {          
        $('input#Destination').val(e.val); 
          });

});

Возвращаемое значение (e.val) — это значение data.id из вызова ajax, но мой объект данных имеет "имя", "id" и "тип".

Я могу добавить код в dataFormatSelection(), но это не звучит логично и сбивает с толку.

     function dataFormatSelection(data) {
    console.log(data.name + "|" data.id + "|" + data.type);
     return data.name;
 }

Как я могу получить доступ ко всему объекту data (а не только к data.id) в событии on("change"..?


person Alex Angelico    schedule 27.02.2013    source источник


Ответы (3)


Согласно Select2 docs, событие изменения должно иметь 3 свойства: Объект события содержит следующие настраиваемые свойства:

  • val: текущая выборка (с учетом результата изменения) - id или массив id
  • добавлено: добавленный элемент, если есть - полный объект элемента, а не только идентификатор
  • удалено: удаленный элемент, если есть - полный объект элемента, а не только идентификатор

Есть даже пример:

$("#e11").select2({
    placeholder: "Select value ...",
    allowClear: true,
    data: [{id: 0, text: 'story'},{id: 1, text: 'bug'},{id: 2, text: 'task'}]
});

$("#e11_2").select2({
    placeholder: "Select value ...",
    multiple: true,
    data: [{id: 0, text: 'story'},{id: 1, text: 'bug'},{id: 2, text: 'task'}]
});

$("#e11").on("change", function(e) { 
    console.log(JSON.stringify({val:e.val, added:e.added, removed:e.removed})); 
}).on("open", function() { 
    console.log("open"); 
});

$("#e11_2").on("change", function(e) { 
    console.log(JSON.stringify({val:e.val, added:e.added, removed:e.removed})); 
}).on("open", function() { 
    console.log("open"); 
});

Но я заметил, что свойства added и removed присутствуют только при включенном multiple: true. Я не знаю, это так задумано или это ошибка. Я все равно сообщу об этом, потому что наличие выбранного элемента, доступного при изменении, определенно необходимо.

person Primoz Rome    schedule 01.04.2013

У меня есть сомнения... Как я могу взять значения, отображаемые в журнале консоли, и использовать их?

правильно, если я возьму эти значения и положу каждое в переменную? Потому что, если я использую console.log(var) для любой созданной переменной, значение отображается, но если сделать предупреждение (var), предупреждение никогда не отображается.

Мне нужно взять значение параметра, выбранного для вызова с помощью AJAX функции PHP.

$("#e11").on('change', function(e) {
   //I create a var data and works it like an Array
   var data = $(this).select2('data');
   //Then I take the values like if I work with an array
   var value = data.id;
   var text = data.text;
   //If I use console.log(var) the values are displayed but not with an alert
}

Спасибо!!!

person PX10    schedule 27.02.2014
comment
Я думаю, вам следует создать новый вопрос, это другая проблема - person Alex Angelico; 27.02.2014
comment
$(this).select2('data') вернет массив, поэтому вы должны получить к нему доступ с помощью data[Index].id - person Rafael Herscovici; 06.02.2016

person    schedule
comment
Таким образом, данные не обновляются, выбранное значение не помечается как выбранное. Чтобы получить выбранное значение с помощью ES6, выполните $input.select2('data').find(item => item.element.selected). Протестировано с Select 2 v4.0.12 - person Loenix; 08.04.2020