Как установить выбранное значение jquery select2?

100

Это относится к кодам до версии select2 4

У меня есть простой код для select2получения данных из ajax

$("#programid").select2({
  placeholder: "Select a Program",
  allowClear: true,
  minimumInputLength: 3,
  ajax: {
    url: "ajax.php",
    dataType: 'json',
    quietMillis: 200,
    data: function (term, page) {
      return {
        term: term, //search term
        flag: 'selectprogram',
        page: page // page number
      };
    },
    results: function (data) {
      return {results: data};
    }
  },
  dropdownCssClass: "bigdrop",
  escapeMarkup: function (m) { return m; }
});

Этот код работает, однако мне нужно установить для него значение, как в режиме редактирования. Когда пользователь выбирает значение в первый раз, оно будет сохранено, и когда ему нужно отредактировать это значение, оно должно появиться в том же меню выбора ( select2), чтобы выбрать ранее выбранное значение, но я не могу найти способ.

ОБНОВИТЬ:

Код HTML:

<input type="hidden" name="programid" id="programid" class="width-500 validate[required]">

Программный доступ Select2 с этим не работает.

ClearBoth
источник
У вас должна быть возможность просто установить выбранное значение в html или использовать$("#programid").val()
Explosion Pills
@ExplosionPills Negative, я тоже пробовал, у меня пустое значение. Как мне использовать programid.val ()? Я получил значение с сервера, и мне нужно установить его в это скрытое поле select2.
ClearBoth 07
@ClearBoth Не уверен, что понимаю, что вы имеете в виду. Вы пытаетесь установить для «выбранного» значения компонента Select2 один из результатов, полученных с помощью AJAX?
An Phan
@AnPhan Да, есть ли способ сделать это?
ClearBoth,
@ClearBoth Есть. Проверьте мой ответ ниже.
An Phan

Ответы:

62

Чтобы динамически установить "selected" значение компонента Select2:

$('#inputID').select2('data', {id: 100, a_key: 'Lorem Ipsum'});

Где второй параметр - объект с ожидаемыми значениями.

ОБНОВИТЬ:

Это действительно работает, просто хочу отметить, что в новом select2 «a_key» - это «текст» в стандартном объекте select2. так:{id: 100, text: 'Lorem Ipsum'}

Пример:

$('#all_contacts').select2('data', {id: '123', text: 'res_data.primary_email'});

Спасибо @NoobishPro

An Phan
источник
1
Я пытался использовать только id select2 ('val', '1'), но это не сработало .. Спасибо
ClearBoth
6
Это действительно работает, просто хотел отметить, что в новом select2 «a_key» - это «текст» в стандартном объекте select2. итак: {id: 100, text: 'Lorem Ipsum'}
NoobishPro
2
то же самое здесь на v4. Я выдергивал волосы на этом. Я не думаю, что это возможно без использования JavaScript-решений. Ищу еще одно раскрывающееся меню jQuery / Bootstrap Select2 (2 дня возиться со всеми мыслимыми методами - никакой радости!)
MC9000
29
Select2 v4: $('#inputID').val(100).trigger('change') см. Select2.github.io/…
Пол
@NoobishPro и An Phan - Спасибо за ответ и комментарий
Sinto
105

ВЫБРАТЬ2 <V4


Шаг №1: HTML

<input name="mySelect2" type="hidden" id="mySelect2">

Шаг № 2: Создайте экземпляр Select2

$("#mySelect2").select2({
      placeholder: "My Select 2",
      multiple: false,
      minimumInputLength: 1,
      ajax: {
          url: "/elements/all",
          dataType: 'json',
          quietMillis: 250,
          data: function(term, page) {
              return {
                  q: term,
              };
          },
          results: function(data, page) {
              return {results: data};
          },
          cache: true
      },
      formatResult: function(element){
          return element.text + ' (' + element.id + ')';
      },
      formatSelection: function(element){
          return element.text + ' (' + element.id + ')';
      },
      escapeMarkup: function(m) {
          return m;
      }
});

Шаг № 3: Установите желаемое значение

$("#mySelect2").select2('data', { id:"elementID", text: "Hello!"});

Если вы используете select2 без AJAX, вы можете сделать следующее:

<select name="mySelect2" id="mySelect2">
  <option value="0">One</option>
  <option value="1">Two</option>
  <option value="2">Three</option>
</select>
/* "One" will be the selected option */
$('[name=mySelect2]').val("0");

Вы также можете сделать это:

$("#mySelect2").select2("val", "0");

ВЫБРАТЬ2 V4


Для select2 v4 вы можете напрямую добавить параметр / s следующим образом:

<select id="myMultipleSelect2" multiple="" name="myMultipleSelect2[]">
    <option value="TheID" selected="selected">The text</option>                                                                   
</select>

Или с JQuery:

var $newOption = $("<option selected='selected'></option>").val("TheID").text("The text")
 
$("#myMultipleSelect2").append($newOption).trigger('change');

другой пример

$("#myMultipleSelect2").val(5).trigger('change');
томлопрод
источник
3
триггер ('изменение'); это важная часть
mihkov
$ ("# mySelect2"). select2 ("val", "0") - это вызовет событие jquery изменения значения. Как этого не допустить. Обычно, когда пользователь отправляет форму, после завершения я сбрасываю все данные формы. Сброс не сбрасывает select2. Использование select2 ("val", "0") вызовет изменения, что безумно, поскольку от пользователя не будет никаких действий.
jumper rbk
Рекомендовано для .trigger ('change')
JP Dolocanog
23

HTML:

<select id="lang" >
   <option value="php">php</option>
   <option value="asp">asp</option>
   <option value="java">java</option>
</select>

JavaScript:

$("#lang").select2().select2('val','asp');

jsfiddle

Ахмад Таравне
источник
2
как установить по тексту, а не по val
Ризван Патель
Вопрос был в том, как это сделать после загрузки с вызовом AJAX. В данном случае этот ответ не работает.
MC9000 05
это вызовет изменение значения select2, что будет странно, если у вас есть это событие для обработки, и оно сработает без того, чтобы пользователь сделал это
jumper rbk
17

Также, как я пытался, при использовании ajax в select2 методы программного управления для установки новых значений в select2 у меня не работают! Теперь я пишу этот код для решения проблемы:

$('#sel')
    .empty() //empty select
    .append($("<option/>") //add option tag in select
        .val("20") //set value for option to post it
        .text("nabi")) //set a text for show in select
    .val("20") //select option of select2
    .trigger("change"); //apply to select2

Вы можете протестировать полный пример кода по этой ссылке: https://jsfiddle.net/NabiKAZ/2g1qq26v/32/
В этом примере кода есть ajax select2, и вы можете установить новое значение с помощью кнопки.

Наби КАЗ
источник
Я использую другой displayKey и прочее (хотя это была плохая идея) - это отлично помогает при приемочных тестах с Codeception
MonkeyMonkey
2
Утомительно, конечно, но, как все узнают, Select2 v4 просто не имеет возможности сделать что-то настолько смехотворно простое, как установка выбора по умолчанию
MC9000
Я нашел этот ответ единственным способом сделать select2 v4 - ajax select.
13
var $option = $("<option selected></option>").val('1').text("Pick me");

$('#select_id').append($option).trigger('change');

Попробуйте это дополнение, затем выберите. Не дублирует опцию при вызове AJAX.

Джигз
источник
var $ option = $ ("<option selected> </option>") .val ('1'). text ("Выберите меня"); $ ('# select_id'). append ($ option) .trigger ('изменить');
Jigz 07
Спасибо. подтверждена работа над версией 4.0.0 (вызов ajax)
khalil
Еще один подтвержденный успех версии 4 с ajax.
кодер
Если вы используете окно с возможностью поиска с помощью ajax, это правильное решение. Этот сработал для меня июнь 2019.
Эрик Скифф
12

Мне это понравилось-

$("#drpServices").select2().val("0").trigger("change");
Аши
источник
2
Пожалуйста, предоставьте объяснение, чтобы помочь пользователям понять, как работает ваш код, и ответить на вопрос OP.
Иван
@Ivan, я делал вот так $ ("# drpServices"). Val ("0"); который не будет выбирать taxt в раскрывающемся списке select2, для воздействия как на значение, так и на текст нам нужна функция изменения триггера select2. У меня это отлично работает. Надеюсь, пользователи поймут.
Аши
9

В текущей версии select2- v4.0.1 вы можете установить значение так:

var $example = $('.js-example-programmatic').select2();
$(".js-programmatic-set-val").on("click", function () { $example.val("CA").trigger("change"); });

// Option 2 if you can't trigger the change event.
var $exampleDestroy = $('.js-example-programmatic-destroy').select2();
$(".js-programmatic-set-val").on("click", function () { $exampleDestroy.val("CA").select2('destroy').select2(); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/js/select2.min.js"></script>
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/css/select2.min.css" rel="stylesheet" />

using "trigger(change)"
<select class="js-example-programmatic">
  <optgroup label="Alaskan/Hawaiian Time Zone">
    <option value="AK">Alaska</option>
    <option value="HI">Hawaii</option>
  </optgroup>
  <optgroup label="Pacific Time Zone">
    <option value="CA">California</option>
    <option value="NV">Nevada</option>
    <option value="OR">Oregon</option>
    <option value="WA">Washington</option>
  </optgroup>
  <optgroup label="Mountain Time Zone">
    <option value="AZ">Arizona</option>
    <option value="CO">Colorado</option>
    <option value="ID">Idaho</option>
    <option value="MT">Montana</option>
    <option value="NE">Nebraska</option>
    <option value="NM">New Mexico</option>
    <option value="ND">North Dakota</option>
    <option value="UT">Utah</option>
    <option value="WY">Wyoming</option>
  </optgroup>
  <optgroup label="Central Time Zone">
    <option value="AL">Alabama</option>
    <option value="AR">Arkansas</option>
    <option value="IL">Illinois</option>
    <option value="IA">Iowa</option>
    <option value="KS">Kansas</option>
    <option value="KY">Kentucky</option>
    <option value="LA">Louisiana</option>
    <option value="MN">Minnesota</option>
    <option value="MS">Mississippi</option>
    <option value="MO">Missouri</option>
    <option value="OK">Oklahoma</option>
    <option value="SD">South Dakota</option>
    <option value="TX">Texas</option>
    <option value="TN">Tennessee</option>
    <option value="WI">Wisconsin</option>
  </optgroup>
  <optgroup label="Eastern Time Zone">
    <option value="CT">Connecticut</option>
    <option value="DE">Delaware</option>
    <option value="FL">Florida</option>
    <option value="GA">Georgia</option>
    <option value="IN">Indiana</option>
    <option value="ME">Maine</option>
    <option value="MD">Maryland</option>
    <option value="MA">Massachusetts</option>
    <option value="MI">Michigan</option>
    <option value="NH">New Hampshire</option>
    <option value="NJ">New Jersey</option>
    <option value="NY">New York</option>
    <option value="NC">North Carolina</option>
    <option value="OH">Ohio</option>
    <option value="PA">Pennsylvania</option>
    <option value="RI">Rhode Island</option>
    <option value="SC">South Carolina</option>
    <option value="VT">Vermont</option>
    <option value="VA">Virginia</option>
    <option value="WV">West Virginia</option>
  </optgroup>
</select>

using destroy: 
<select class="js-example-programmatic">
  <optgroup label="Alaskan/Hawaiian Time Zone">
    <option value="AK">Alaska</option>
    <option value="HI">Hawaii</option>
  </optgroup>
  <optgroup label="Pacific Time Zone">
    <option value="CA">California</option>
    <option value="NV">Nevada</option>
    <option value="OR">Oregon</option>
    <option value="WA">Washington</option>
  </optgroup>
  <optgroup label="Mountain Time Zone">
    <option value="AZ">Arizona</option>
    <option value="CO">Colorado</option>
    <option value="ID">Idaho</option>
    <option value="MT">Montana</option>
    <option value="NE">Nebraska</option>
    <option value="NM">New Mexico</option>
    <option value="ND">North Dakota</option>
    <option value="UT">Utah</option>
    <option value="WY">Wyoming</option>
  </optgroup>
  <optgroup label="Central Time Zone">
    <option value="AL">Alabama</option>
    <option value="AR">Arkansas</option>
    <option value="IL">Illinois</option>
    <option value="IA">Iowa</option>
    <option value="KS">Kansas</option>
    <option value="KY">Kentucky</option>
    <option value="LA">Louisiana</option>
    <option value="MN">Minnesota</option>
    <option value="MS">Mississippi</option>
    <option value="MO">Missouri</option>
    <option value="OK">Oklahoma</option>
    <option value="SD">South Dakota</option>
    <option value="TX">Texas</option>
    <option value="TN">Tennessee</option>
    <option value="WI">Wisconsin</option>
  </optgroup>
  <optgroup label="Eastern Time Zone">
    <option value="CT">Connecticut</option>
    <option value="DE">Delaware</option>
    <option value="FL">Florida</option>
    <option value="GA">Georgia</option>
    <option value="IN">Indiana</option>
    <option value="ME">Maine</option>
    <option value="MD">Maryland</option>
    <option value="MA">Massachusetts</option>
    <option value="MI">Michigan</option>
    <option value="NH">New Hampshire</option>
    <option value="NJ">New Jersey</option>
    <option value="NY">New York</option>
    <option value="NC">North Carolina</option>
    <option value="OH">Ohio</option>
    <option value="PA">Pennsylvania</option>
    <option value="RI">Rhode Island</option>
    <option value="SC">South Carolina</option>
    <option value="VT">Vermont</option>
    <option value="VA">Virginia</option>
    <option value="WV">West Virginia</option>
  </optgroup>
</select>

<button class="js-programmatic-set-val">set value</button>

Мош Феу
источник
Как я могу установить значение, не вызывая события изменения? Событие изменения запускает мои собственные обработчики событий, которые предназначены для случаев, когда пользователь изменяет значение вручную.
enumag 03
Другой вариант - destroyповторно вызвать плагин и снова вызвать его. См. Обновленный код.
Mosh Feu
Есть ли способ получить параметры, которые я изначально передал в select2, чтобы мне не пришлось их дублировать? В любом случае это решение больше похоже на взлом.
enumag 03
Конечно хач. Официальный способ в соответствии с документами - вызвать событие изменения. so that I wouldn't have to duplicate themЗачем их дублировать? Когда вы все еще там со всеми его . destroyselectoptions
Mosh Feu
Я имел в виду параметры, переданные в select2:$example.select2({ ... this ... })
enumag
6

Для Ajax используйте $(".select2").val("").trigger("change"). Это должно решить проблему.

Саб
источник
6

Я думаю тебе нужна initSelectionфункция

$("#programid").select2({
  placeholder: "Select a Program",
  allowClear: true,
  minimumInputLength: 3,
  ajax: {
    url: "ajax.php",
    dataType: 'json',
    quietMillis: 200,
    data: function (term, page) {
      return {
        term: term, //search term
        flag: 'selectprogram',
        page: page // page number
      };
    },
    results: function (data) {
      return {results: data};
    }
  },
  initSelection: function (element, callback) {
    var id = $(element).val();
    if (id !== "") {
      $.ajax("ajax.php/get_where", {
        data: {programid: id},
        dataType: "json"
      }).done(function (data) {
        $.each(data, function (i, value) {
          callback({"text": value.text, "id": value.id});
        });
        ;
      });
    }
  },
  dropdownCssClass: "bigdrop",
  escapeMarkup: function (m) { return m; }
});
Ахмад Таравне
источник
Это работает. Но не рекомендуется в версии 4.0
VisualBean
5

HTML

<select id="lang" >
   <option value="php">php</option>
   <option value="asp">asp</option>
   <option value="java">java</option>
</select>

JS

 $("#lang").select2().val('php').trigger('change.select2');

источник: https://select2.github.io/options.html

Навин Д.А.
источник
5

В Select2 V.4

использовать $('selector').select2().val(value_to_select).trigger('change');

Я думаю это должно работать

Акаш шарма
источник
3

Установите значение и немедленно активируйте событие изменения.

$('#selectteam').val([183,182]).trigger('change');
Маной Патель
источник
Спасибо, же мой день
Jaydeep purohit
3
    $("#select_location_id").val(value);
    $("#select_location_id").select2().trigger('change');

Я решил свою проблему с помощью этого простого кода. Где #select_location_id - это идентификатор поля выбора, а значение - это значение параметра, указанного в поле выбора2.

Нуман Патан
источник
2

Ответ Фана сработал для меня:

$('#inputID').select2('data', {id: 100, a_key: 'Lorem Ipsum'});

Но добавление изменения вызывает событие

$('#inputID').select2('data', {id: 100, a_key: 'Lorem Ipsum'}).change();
Андрес Родригес
источник
1
Я получаю сообщение об ошибке «Uncaught TypeError: $ (...). Select2 (...). Change is not a function (…)», когда делаю это таким образом. Я не думаю, что это возможно с версией 4.x Select2 - здесь ничего не работает с ajax.
MC9000 05
2

вы можете использовать этот код:

$("#programid").val(["number:2", "number:3"]).trigger("change");

где 2 в "number: 2" и 3 в "number: 3" - это поле идентификатора в массиве объектов.

HamidReza
источник
1

Иногда select2()сначала загружается, и из-за этого элемент управления не отображает правильно ранее выбранное значение. Задержка на несколько секунд может решить эту проблему.

setTimeout(function(){                  
    $('#costcentreid').select2();               
},3000);
Пурнима
источник
1
$('#inputID').val("100").select2();

Правильнее подать заявку select2после выбора одного из текущих вариантов.

Мехмет Али Улусан
источник
0

Я сделал что-то вроде этого, чтобы предустановить элементы в раскрывающемся списке select2 ajax

      //preset element values
        $(id).val(topics);
       //topics is an array of format [{"id":"","text":""}, .....]
          setTimeout(function(){
           ajaxTopicDropdown(id,
                2,location.origin+"/api for gettings topics/",
                "Pick a topic", true, 5);                      
            },1);
        // ajaxtopicDropdown is dry fucntion to get topics for diffrent element and url
Аджит Лакхани
источник
0

Вам следует использовать:

var autocompleteIds= $("#EventId");
autocompleteIds.empty().append('<option value="Id">Text</option>').val("Id").trigger('change');

// For set multi selected values
var data =  [];//Array Ids
var option =  [];//Array options of Ids above
autocompleteIds.empty().append(option).val(data).trigger('change');

// Callback handler that will be called on success
request.done(function (response, textStatus, jqXHR) {
    // append the new option
    $("#EventId").append('<option value="' + response.id + '">' + response.text + '</option>');

    // get a list of selected values if any - or create an empty array
    var selectedValues = $("#EventId").val();
    if (selectedValues == null) {
        selectedValues = new Array();
    }
    selectedValues.push(response.id);   // add the newly created option to the list of selected items
    $("#EventId").val(selectedValues).trigger('change');   // have select2 do it's thing
});
Xman Классический
источник
0

Если вы используете поле ввода, вы должны установить для свойства «множественный» значение «истина». Например,

<script>
    $(document).ready(function () {

        var arr = [{ id: 100, text: 'Lorem Ipsum 1' },
            { id: 200, text: 'Lorem Ipsum 2'}];

        $('#inputID').select2({
            data: arr,
            width: 200,
            multiple: true
        });
    });
</script>
Арун Баник
источник
0

В select2 < version4нем есть опция initSelection()удаленной загрузки данных, с помощью которой можно установить начальное значение для ввода, как в режиме редактирования.

$("#e6").select2({
    placeholder: "Search for a repository",
    minimumInputLength: 1,
    ajax: { 
        // instead of writing the function to execute the request we use Select2's convenient helper
        url: "https://api.github.com/search/repositories",
        dataType: 'json',
        quietMillis: 250,
        data: function (term, page) {
            return {
                q: term, // search term
            };
        },
        results: function (data, page) {
            // 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
            return { results: data.items };
        },
        cache: true
    },
    initSelection: function(element, callback) {
        // the input tag has a value attribute preloaded that points to a preselected repository's id
        // this function resolves that id attribute to an object that select2 can render
        // using its formatResult renderer - that way the repository name is shown preselected
        var id = $(element).val();
        if (id !== "") {
            $.ajax("https://api.github.com/repositories/" + id, {
                dataType: "json"
            }).done(function(data) { callback(data); });
        }
    },
    formatResult: repoFormatResult, // omitted for brevity, see the source of this page
    formatSelection: repoFormatSelection,  // omitted for brevity, see the source of this page
    dropdownCssClass: "bigdrop", // apply css that makes the dropdown taller
    escapeMarkup: function (m) { return m; } // we do not want to escape markup since we are displaying html in results
});

Исходная документация: Select2 - 3.5.3

Сайрам Суреш
источник
0

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

Я пытался установить выбранный вариант моих динамически загружаемых параметров (из AJAX) и пытался установить один из вариантов как выбранный в зависимости от некоторой логики.

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

Glen
источник
0

Для нескольких значений примерно так:

$("#HouseIds").select2("val", @Newtonsoft.Json.JsonConvert.SerializeObject(Model.HouseIds));

что будет переводиться примерно так

$("#HouseIds").select2("val", [35293,49525]);
Роберт Беньи
источник
0

Это может помочь кому-то загрузить данные select2 из AJAX при загрузке данных для редактирования ( применимо для одиночного или множественного выбора ):

Во время загрузки моей формы / модели:

  $.ajax({
        type: "POST",
        ...        
        success: function (data) {
          selectCountries(fixedEncodeURI(data.countries));
         }

Позвоните, чтобы выбрать данные для Select2:

var countrySelect = $('.select_country');
function selectCountries(countries)
    {
        if (countries) {
            $.ajax({
                type: 'GET',
                url: "/regions/getCountries/",
                data: $.param({ 'idsSelected': countries }, true),

            }).then(function (data) {
                // create the option and append to Select2                     
                $.each(data, function (index, value) {
                    var option = new Option(value.text, value.id, true, true);
                    countrySelect.append(option).trigger('change');
                    console.log(option);
                });
                // manually trigger the `select2:select` event
                countrySelect.trigger({
                    type: 'select2:select',
                    params: {
                        data: data
                    }
                });
            });
        }
    }

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

function fixedEncodeURI(str) {
        return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']').replace(/%22/g,"");

    }
Камран Уль Хак
источник
0

если вы получаете свои значения из ajax, перед вызовом

$("#select_location_id").val(value);
$("#select_location_id").select2().trigger('change');

подтвердите, что вызов ajax завершен, используя функцию jquery, когда

$.when(ajax1(), ajax2(), ajax3(), ajax4()).done(function(a1, a2, a3, a4){
      // the code here will be executed when all four ajax requests resolve.
      // a1, a2, a3 and a4 are lists of length 3 containing the response text,
      // status, and jqXHR object for each of the four ajax calls respectively.
    }); 
как описано здесь [ Подождите, пока не будут выполнены все запросы jQuery Ajax?

Виктор Мванги
источник
0

Чтобы построить поверх ответа @tomloprod. По нечетной вероятности, что вы используете x-editable , имеете поле select2 (v4) и несколько элементов, которые вам нужно предварительно выбрать. Вы можете использовать следующий фрагмент кода:

$("#select2field").on("shown", function(e, editable){
    $(["test1", "test2", "test3", "test4"]).each(function(k, v){
        // Create a DOM Option and pre-select by default~
        var newOption = new Option(v.text, v.id, true, true);
        // Append it to the select
        $(editable.input.$input).append(newOption).trigger('change');
     });
});

и вот оно в действии:

var data = [
{
    id: 0,
    text: 'enhancement'
},
{
    id: 1,
    text: 'bug'
},
{
    id: 2,
    text: 'duplicate'
},
{
    id: 3,
    text: 'invalid'
},
{
    id: 4,
    text: 'wontfix'
}
];

$("#select2field").editable({
        type: "select2",
        url: './',
        name: 'select2field',
        savenochange: true,
        send: 'always',
        mode: 'inline',
        source: data,
        value: "bug, wontfix",
        tpl: '<select style="width: 201px;">',
        select2: {
            width: '201px',
            tags: true,
            tokenSeparators: [',', ' '],
            multiple: true,
            data:data
        },
        success: function(response, newValue) {
            console.log("success")
        },
        error: function(response, newValue) {
            if (response.status === 500) {
                return 'Service unavailable. Please try later.';
            } else {
                return response.responseJSON;
            }
        }
    });

var preselect= [
    {
        id: 1,
        text: 'bug'
    },
    {
    id: 4,
    text: 'wontfix'
}
];

 $("#select2field").on("shown", function(e, editable){
    $(preselect).each(function(k, v){
        // Create a DOM Option and pre-select by default~
        var newOption = new Option(v.text, v.id, true, true);
        // Append it to the select
        $(editable.input.$input).append(newOption).trigger('change');
     });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/js/select2.min.js"></script>
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/css/select2.min.css" rel="stylesheet" />

<link href="//cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.0/bootstrap3-editable/css/bootstrap-editable.css" rel="stylesheet"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.0/bootstrap3-editable/js/bootstrap-editable.min.js"></script>

<a id="select2field">bug, wontfix</a>

Я думаю, это сработает, даже если вы не используете x-editable. Надеюсь, что это могло кому-то помочь.

Ренье
источник
0

Вы можете использовать этот код:

    $('#country').select2("val", "Your_value").trigger('change');

Введите желаемое значение вместо Your_value

Надеюсь, это сработает :)

Дух решения
источник
-2

Легко и приятно:

document.getElementById("select2-id_city-container").innerHTML = "Your Text Here";

И вы переходите id_cityк идентификатору вашего выбора.

Изменить: после комментария Глена я понимаю, что должен объяснить, почему и как это сработало для меня:

Я сделал select2работу действительно приятной для моей формы. Единственное, что у меня не получалось, так это показывать текущее выбранное значение при редактировании. Он искал сторонний API, сохранял новые и редактировал старые записи. Через некоторое время я понял, что мне не нужно правильно устанавливать значение, только метку внутри поля, потому что, если пользователь не изменит поле, ничего не произойдет. После поиска и изучения множества людей, у которых возникли проблемы с этим, я решил сделать это на чистом Javascript. Это сработало, и я написал, чтобы, возможно, кому-то помочь. Я также предлагаю установить для этого таймер.

Bonafernando
источник
Этот ответ - ужасный взлом, который даже не установил бы значение правильно.
Glen
Я сожалею о том, что. Я отредактирую свой ответ, чтобы объяснить, почему я его опубликовал.
bonafernando