Select2 не показывает выбранное значение

Select2 успешно загружает все элементы из моего списка, проблема, которую я обнаружил при попытке выбрать определенное значение при загрузке страницы. Пример:

:: поместите select2 в определенный элемент html, значение не будет выбрано, даже если все элементы загружены.

$('#my_id').select2();

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

$('#my_id').val('3'); //select the right option, but doesn't render it on page loads.

Как сделать так, чтобы выбранная опция появлялась при загрузке страниц?

Заранее спасибо.

ОБНОВЛЕНО

:: Как я загружаю все элементы select2 (извините, это jade, а не чистый HTML):

label(for='category') Category
    span.required *
select(id='category', style='width:230px', name='category')
    option(value='') - Select -
    each cat in categories
        option(value='#{cat.id}') #{cat.description}

P.S .: Все элементы из моего списка загружены.

:: Как я инициализирую select2:

Просто поместите следующий код строки в мой javascript, и он будет успешным:

$('#category').select2();

:: Как я пытаюсь выбрать конкретное значение:

  • Первая попытка:

    $('#category').select2(
        {
            initSelection: function(element, callback) {
                callback($('#field-category').val());
            }
        }
    );
    
  • Вторая попытка:

    $('#category').val($('#field-category').val());
    

P.S .: #field-category имеет значение в скрытом поле ввода и работает нормально.

Спасибо ребята!


person Ito    schedule 19.02.2013    source источник
comment
Является ли 3 значением параметра, который вы хотите выбрать? Вы завернули код в функцию готовности документа?   -  person Johan    schedule 19.02.2013
comment
Можете поделиться наценкой / данными для select2   -  person Arun P Johny    schedule 19.02.2013
comment
@Ito Посмотрите мой обновленный ответ, похоже, нет необходимости использовать initSelection   -  person Arun P Johny    schedule 19.02.2013


Ответы (11)


Для установки начального значения необходимо использовать параметр initSelection.

Если вы используете предопределенный элемент select для создания select2, вы можете использовать следующий метод

$('select').select2().select2('val','3')

Демо: Fiddle

person Arun P Johny    schedule 19.02.2013
comment
Я пробовал initSelection раньше, возможно, мой код неправильный. Я покажу здесь - person Ito; 19.02.2013
comment
Спасибо, Арун, работал у меня. Когда страница загружается, select2 загружается с определенным значением. - person Ito; 19.02.2013
comment
Хороший код, кстати, я хочу понять, почему мне нужно использовать select2 () дважды? - person Ito; 19.02.2013
comment
Это потому, что я не нашел способа передать начальное значение select2. поэтому я создаю select2, используя первый вызов, а затем устанавливаю значение, используя второй вызов. - person Arun P Johny; 19.02.2013
comment
Спасибо, Арун, может это ошибка компонента. - person Ito; 19.02.2013
comment
@ArunPJohny Можете ли вы помочь с первоначальным выбором в BackboneForms? - person JJD; 14.07.2013
comment
@ArunPJohny Пожалуйста, поправьте меня, если я ошибаюсь. Я попробовал пример скрипки, используя вашу ссылку, но, похоже, он не работает, значение по умолчанию должно быть три, верно? но показывает всегда Один. - person guilhebl; 18.02.2015
comment
@guilhebl см. сейчас - jsfiddle.net/arunpjohny/AeXYN - js-файлы плагина были перемещены туда были ошибки - person Arun P Johny; 18.02.2015
comment
Теперь это устарело в пользу другого ответа в Select2 4.0.0 и, вероятно, полностью перестанет работать в Select2 4.1.0. . - person Kevin Brown; 24.05.2015

добавить изменение триггера после установки val:

$('#my_id').val('3').trigger('change');
person Kokizzu    schedule 11.11.2014
comment
Теперь это рекомендуемый способ установки значения в 4.0.0, поскольку он работает стабильно и соответствует нормальному <select>. - person Kevin Brown; 24.05.2015
comment
Что, если я не хочу инициировать изменение, но оно все равно отображается? - person bpromas; 10.11.2015
comment
Но что, если я прикрепил что-то к select2: select и не изменять? Выполнение вышеуказанного не сработает. - person dama_do_bling; 09.03.2016

Очень простой способ решить эту проблему:

//Step1: Here assuming id of your selectbox is my_id, so this will add selected attribute to 1st option
$('#my_id option').eq(0).prop('selected',true);

//Step2: Now reinitialize your select box

//This will work, if you haven't initialized selectbox
$('#my_id').select2(); 

or

//This will work, if you have initialized selectbox earlier, so destroy it first and initialise it
$('#my_id').select2('destroy').select2();
person Raj Soni    schedule 13.02.2018

Это может помочь:

$('#mySelect2').val('1'); // Select the option with a value of '1'
$('#mySelect2').trigger('change'); // Notify any JS components that the value changed

Дополнительную информацию можно найти здесь:

Спасибо

person Sushil Adhikari    schedule 03.01.2019

Согласно здесь, initSelection устарел в Select2 4.0 и более поздних версиях.

Используя Select2 4.0.0, это сработало для меня:

$('#my_id').select2({val:3});

HT: @Kokizzu

person Patrick    schedule 04.05.2015
comment
val даже не является допустимым параметром для Select2, это работает, потому что вызов .select2() полностью повторно инициализирует Select2 (что в конечном итоге обнаруживает новое выбранное значение). - person Kevin Brown; 24.05.2015

Вот как сделать val в select2, просто выберите соответствующий элемент. По какой-то причине select2 не предоставляет функцию поиска выборок по идентификатору.

в этом:

$("#thing").select2({data:sources, initSelection: function(item, callback) {
  // despite select2 having already read the whole sources list when you 
  // do .val(n) you have to explicitly tell it how to find that item again.
  var to_be_selected = null;
  $.each(sources, function(index, thing) {
    if (thing.id == item.val()) {
      to_be_selected = thing;
      return;
    }
  })
  callback(to_be_selected);
}})

нормальный код

// to load the thing with id==3 from the initial sources list.
$("#thing").select2({'val': 3})
person fastmultiplication    schedule 23.06.2013
comment
может это {val:3} не {'val', 3}? - person Kokizzu; 26.02.2015
comment
{val: 3} (не настоящий вариант) и {val, 3} (неверный синтаксис) на самом деле не будут работать. Возможно, вам повезет, если Select2 выполнит повторную инициализацию, но в долгосрочной перспективе это удачный побочный эффект. - person Kevin Brown; 24.05.2015

Для меня я отправлял выбранные в наборе данных, но опция по умолчанию не выбиралась. Мне пришлось сделать что-то вроде ниже, чтобы это работало -

$(".select").select2({
    data: data_names
});
data_names.forEach(function(name) {
    if (name.selected) {
        $(".select").select2('val', name.id);
    }
});
person Aniket Thakur    schedule 10.12.2017

У меня было несколько полей select2 с несколькими вариантами выбора.

Шаг 1 заключался в том, чтобы поместить мою строку school_ids в массив целых чисел, соответствующих идентификатору каждой школы, и удалить ведущий ноль. Пришлось сделать это в отдельном теге скрипта.

<script>
    var school_ids = <%= raw JSON.parse(@search.school_ids).map{|x| x.to_i} - [0]%>
</script>

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

<script>
$(document).ready(function() {
        $('.select2-multiple').select2({
            placeholder: "Hit Enter After Selection",
            width: 'resolve'
        });
        $('.select2-multiple').val(school_ids);
        $('.select2-multiple').trigger('change');
</script>
person tomb    schedule 22.05.2019

триггер просто выберите2, чтобы установить значение

$('#my_id').val('3').trigger("change.select2");

и это вызовет select2 с раскрывающимся списком

$('#my_id').val('3').trigger("change");
person Dalim Mohammad    schedule 19.02.2020

Встречаюсь с той же проблемой, у меня это работает :

Using Select2 > 4.0.0
$('#select_id').val('3').trigger('change');
person mmary    schedule 07.07.2016

  var option=$(this);
   if(option.val()==data.StudentCourses.CourseId)
   {
    option.setAttribute('Selected');
   }
   });

Я инициализировал select2, потому что мне просто нужно, чтобы из них было выбрано несколько опций.

person Blawal Ghumman    schedule 06.10.2020