2015-04-17 3 views
13

Я использую select2 version 4.0, и я пытаюсь сделать программный выбор в поле выбора, которое получает свои данные из вызова ajax.Программный выбор select2, который извлекает свои данные через Ajax

В документации я нашел, как установить значение программным путем на обычный select2, но я не могу понять, как это сделать с помощью выбора ajax.

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

jQuery("selectbox").select2("data", data) 

Я попытался это, и послал объект данных с , id, текст и результат, но ничего не видно, и когда я запрашиваю статус окна выбора, чтобы увидеть выбранные значения, он возвращает null.

Был ли этот вариант удален или просто изменен? Где я могу найти это в документации или как я могу достичь желаемого поведения?

+3

любой скрипку демо? – nirmal

ответ

8

Единственный способ добиться этого - сначала добавить <option> в select dom с данными, которые вы хотите выбрать, и сразу же выберите его так, как если бы вы делали это с помощью обычного блока выбора. Это был официальный ответ от кевина-коричневого также на странице проекта github.

https://github.com/select2/select2/issues/3273

Итак, basicaly, если вы знаете, что вы хотели бы выбрать, вы можете легко создать <option> элемент из него, добавить его в оригинальной выберите поле, а затем выберите его это значение:

var option=jQuery("<option>").attr("value","your_id_here").html("your_text_here"); 
jQuery("selectbox").append(option); 
jQuery("selectbox").val("your_id_here").trigger("change"); 
+0

Это то, чего я надеялся избежать - заполнить список сам, из моего кода JS. Я хотел попросить select2 выполнить загрузку AJAX, которая была бы нажата, а затем выбрать один из недавно загруженных результатов в моем JS-коде. Похоже, это невозможно? –

+1

Первая часть, что вам потребуется, возможно PERHAPS (я должен изучить ее), но выбранная часть только достижима с помощью вышеупомянутого решения (по крайней мере, с версией 4.0). Возможно, ребята, которые создали этот замечательный плагин, будут включать программное решение в более поздних версиях, давайте надеяться на это :) Тем временем, я проверю, если заполнение окна поиска через javascript, без щелчка, возможно каким-то образом или нет, я вернусь с моими результатами, как только смогу –

4

Я хотел бы также хотелось знать, полный ответ на этот вопрос, но вот частичное решение:

$('#select2-control-id').val('item-id').trigger('select2:select').trigger('change'); 

Это только кажется, работает, если select2 уже погрузили деталь вы просите - то это который вы уже нажали.

Не только вы должны вручную открыть раскрывающееся меню, чтобы загрузить первую страницу элементов через AJAX - вы также должны иметь на самом деле нажал на тот, который вы хотите программным образом выбрать позже.

Это похоже на то, что он добавляет <options> в базовый элемент select, когда вы на самом деле нажимаете на них.

Я не вижу способа программно сообщить select2, чтобы загрузить первую страницу результатов AJAX.

0

Вы можете попробовать это.

var dataString = 'id='+$value; 
    var promise = sendAjaxFunction('load_form.php?k=1',dataString); 
    $("#LoadMachine").html("<img src='images/ajax-loader.gif' />"); 
    promise.success(function (data) { 
     $("#LoadMachine").html(data); 
     $("#MachineName").select2({ 
      placeholder: 'Select Operation Name ...', 
      allowClear: true 
     }); 
     return false; 
    }); 

Загрузите данные в Div #LoadMachine и в результате вы можете загрузить select2.

1

Это легко манипулировать скрытый <select/> поле, как:

//set first option as selected 
$("select [value='0']").attr("selected","selected"); 
$("select").trigger("change"); 

Demo