Как изменить выбранное значение выпадающего списка select2 с помощью JqGrid?


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

например, если загружены четыре значения:"Any", "Fruit", "Vegetable", "Meat" и выпадающий список по умолчанию "Any", как бы я мог изменить это на "Fruit" в событии JqGrid loadComplete?

это возможно?

14 147

14 ответов:

для версии select2 >= 4.0.0

другие решения могут не работать, однако, следующие примеры должны работать.

Решение 1: вызывает запуск всех вложенных событий изменения, включая select2

$('select').val('1').trigger('change');

решение 2: вызывает только событие изменения select2 для запуска

$('select').val('1').trigger('change.select2');

посмотреть этот jsfiddle для примеров из них. Спасибо @minlare за решение 2.

объяснение:

скажем, у меня есть лучший друг выбрать с именами людей. Итак, Боб, Билл и Джон (в этом примере я предполагаю, что значение совпадает с именем). Сначала я инициализирую select2 на моем select:

$('#my-best-friend').select2();

теперь я вручную выбираю Bob в браузере. Затем Боб делает что-то непослушное, и он мне больше не нравится. Так что система снимает боб для меня:

$('#my-select').val('').trigger('change');

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

// I have assume you can write code to select the next guy in the list
$('#my-best-friend').val('Bill').trigger('change');  

Примечания на веб-сайте Select 2 (см. устаревшие и удаленные методы) это может быть полезно для других:

.select2 ('val') Метод " val " устарел и будет удален в Select2 4.1. Устаревший метод больше не включает параметр triggerChange.

вы должны сразу позвонить .вместо этого val на Базовом элементе. Если вам нужен второй параметр (triggerChange), вы также должны вызвать .триггер ("изменение") на элементе.

$('select').val('1').trigger('change'); // instead of $('select').select2('val', '1');

смотреть на!--5-- > select2 docs использовать НИЖЕ, чтобы получить/установить значение.

$("#select").select2("val"); //get the value
$("#select").select2("val", "CA"); //set the value

@PanPipes указал, что это изменилось для 4.x (идите бросьте ему upvote ниже). val теперь вызывается напрямую

$("#select").val("CA");

внутри loadComplete из jqGrid вы можете получить любое значение, которое вы ищете, а затем установить значение selectbox.

обратите внимание на документы

обратите внимание, что для использования этого метод, который вы должны определить функция initSelection в настройках, поэтому Select2 знает, как преобразуйте идентификатор объекта, который вы передаете в val (), в полный объект it необходимо сделать выбор. Если вы прикрепляетесь к элементу select эта функция уже предусмотрена для вас.

this.$("#yourSelector").select2("data", { id: 1, text: "Some Text" });

это должно помочь.

Это должно быть даже проще.

$("#e1").select2("val", ["View" ,"Modify"]);

но убедитесь, что значения, которые вы передаете, уже присутствуют в HTMl

просто хотел добавить второй ответ. Если у вас есть уже отображается select как select2, вам нужно будет иметь это отражено в вашем селекторе следующим образом:

$("#s2id_originalSelectId").select2("val", "value to select");

если вы хотите добавить новый value='newValue' и text='newLabel', вы должны добавить этот код:

  1. добавить новую опцию в <select>:

    var opt = "<option value='newValue' selected ='selected'>" + newLabel+ " </option>";
    $(selLocationID).html(opt);
    
  2. триггер <select> изменить на выбранное значение:

    $(selLocationID).val('newValue').trigger("change");
    

у вас есть два варианта - как @PanPipes ответ государства вы можете сделать следующее.

$(element).val(val).trigger('change');

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

$(element).val(val).trigger('change.select2');

возникли некоторые проблемы с установкой параметра строки, выбранного в select2:

с опцией:" опция string1 /option " используется:

$('#select').val("string1").change(); 

но с опцией со значением: значение опции" E " string1 / option:

$('#select').val("E").change(); // you must enter the Value instead of the string

надеется, что это поможет кому-то бороться с той же проблемой.

Если вы хотите выбрать одно значение, а затем использовать $('#select').val(1).change()

Если вы хотите выбрать несколько значений, то значение в массиве, так что вы можете использовать этот код $('#select').val([1,2,3]).change()

для V4 Select2, если вы хотите изменить как значение select2, так и текстовое представление выпадающего списка.

var intValueOfFruit = 1;
var selectOption = new Option("Fruit", intValueOfFruit, true, true);
$('#select').append(selectOption).trigger('change');

это установит не только значение за кулисами, но и текстовое отображение для select2.

вытащил из https://select2.github.io/announcements-4.0.html#removed-methods

мой ожидаемый код :

$('#my-select').val('').change();

отлично работает благодаря @PanPipes для полезного.

этого

 $('select#id').val(selectYear).select2();

Если у вас есть источник данных ajax, пожалуйста, обратитесь к этому для ошибок бесплатно

https://select2.org/programmatic-control/add-select-clear-items

/ / настройка элемента управления Select2

$('#mySelect2').select2({
    ajax: {
        url: '/api/students'
    }
});

/ / извлеките предварительно выбранный элемент и добавьте в элемент управления

var studentSelect = $('#mySelect2');
$.ajax({
    type: 'GET',
    url: '/api/students/s/' + studentId
}).then(function (data) {
    // create the option and append to Select2
    var option = new Option(data.full_name, data.id, true, true);
    studentSelect.append(option).trigger('change');

    // manually trigger the `select2:select` event
    studentSelect.trigger({
        type: 'select2:select',
        params: {
            data: data
        }
    });
});
// Set up the Select2 control
$('#mySelect2').select2({
    ajax: {
        url: '/api/students'
    }
});

// Fetch the preselected item, and add to the control
var studentSelect = $('#mySelect2');
$.ajax({
    type: 'GET',
    url: '/api/students/s/' + studentId
}).then(function (data) {
    // create the option and append to Select2
    var option = new Option(data.full_name, data.id, true, true);
    studentSelect.append(option).trigger('change');

    // manually trigger the `select2:select` event
    studentSelect.trigger({
        type: 'select2:select',
        params: {
            data: data
        }
    });
});

шрифт : выберите 2 документации