Сбросить значение select2 и показать заполнитель



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



$("#locations, #grade ").change(function() {
$('#e6').select2('data', {
placeholder: "Studiengang wählen",
id: null,
text: ''
});
});

$("#e6").select2({
placeholder: "Studiengang wählen",
width: 'resolve',
id: function(e) {
return e.subject;
},
minimumInputLength: 2,
ajax: {
url: "index.php?option=com_unis&task=search.locator&tmpl=component&<?php echo JSession::getFormToken() ?>=1",
dataType: 'json',
data: function(term, page) {
return {
q: term, // search term
g: $('#grade option:selected').val(),
o: $('#locations option:selected').val()
};
},
results: function(data, page) {
return {
results: data
};
}
},
formatResult: subjectFormatResult,
formatSelection: subjectFormatSelection,
dropdownCssClass: "bigdrop",
escapeMarkup: function(m) {
return m;
}
});
1712   29  

29 ответов:

вы должны определить select2 как

$("#customers_select").select2({
    placeholder: "Select a customer",
    initSelection: function(element, callback) {                   
    }
});

чтобы сбросить select2

$("#customers_select").select2("val", "");

Select2 изменил свой API:

Select2: The select2("val") метод устарел и будет удален в более поздних версиях Select2. Используемый элемент.функция val() вместо этого.

лучший способ сделать это сейчас:

$('#your_select_input').val('');

Изменить: Декабрь 2016 комментарии предполагают, что ниже-это обновленный способ сделать это:

$('#your_select_input').val([]);

принятый ответ не работает в моем случае. Я пытаюсь это сделать, и это работает:

определить select2:

$("#customers_select").select2({
    placeholder: "Select a State",
    allowClear: true
});

или

$("#customers_select").select2({
    placeholder: "Select a State"
});

для сброса:

$("#customers_select").val('').trigger('change')

или

$("#customers_select").empty().trigger('change')

единственное, что может работать для меня-это:

$('select2element').val(null).trigger("change")

Я использую версию 4.0.3

ссылка

согласно документации Select2

Select2 использует определенный класс CSS, поэтому простой способ сбросить его:

$('.select2-container').select2('val', '');

и у вас есть преимущество, если у вас есть несколько Select2 в той же форме, все они будут сброшены с этим единым командованием.

используйте этот :

$('.select').val([]).trigger('change');

ЧТОБЫ УДАЛИТЬ ВЫБРАННОЕ ЗНАЧЕНИЕ

$('#employee_id').select2('val','');

ЧТОБЫ ОЧИСТИТЬ ЗНАЧЕНИЯ ПАРАМЕТРОВ

$('#employee_id').html('');

Я знаю, что это старый вопрос, но это работает для select2 версии 4.0

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

или

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

Если у вас есть изменения событий, связанных с ним

во-первых, вы должны определить select2 такой:

$('#id').select2({
    placeholder: "Select groups...",
    allowClear: true,
    width: '100%',
})

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

$("#id > option").removeAttr("selected");
$("#id").trigger("change");

вы можете очистить выбор te по

$('#object').empty();

но это не вернет вас к вашему заполнителю.

Так что его половина решение

это правильно:

 $("#customers_select").val('').trigger('change');

Я использую последнюю версию Select2.

для пользователей, загружающих удаленные данные,этой сбросит select2 в заполнитель без запуска ajax. Работает с V4.0.3:

$("#lstProducts").val("").trigger("change.select2");

использовать следующие действия, чтобы настроить select2

    $('#selectelementid').select2({
        placeholder: "Please select an agent",
        allowClear: true // This is for clear get the clear button if wanted 
    });

и очистить выберите ввод программно

    $("#selectelementid").val("").trigger("change");
    $("#selectelementid").trigger("change");

после рекомендовано способ сделать это. Найдено в документации https://select2.github.io/options.html#my-first-option-is-being-displayed-instead-of-my-placeholder (это, кажется, довольно распространенная проблема):

когда это происходит, это обычно означает, что у вас нет пустой <option></option> как первый вариант в вашем <select>.

в:

<select>
   <option></option>
   <option value="foo">your option 1</option>
   <option value="bar">your option 2</option>
   <option value="etc">...</option>
</select>

у меня тоже была эта проблема, и это связано с val(null).trigger("change"); бросив No select2/compat/inputData ошибка перед сбросом заполнителя. Я решил это, поймав ошибку и установив заполнитель напрямую (вместе с шириной). Примечание: Если у вас есть более одного вам нужно будет поймать каждый из них.

try{
    $("#sel_item_ID").select2().val(null).trigger("change");
}catch(err){
    console.debug(err)
}
try{
    $("#sel_location_ID").select2().val(null).trigger("change");
}catch(err){
    console.debug(err)
}
$('.select2-search__field')[0].placeholder='All Items';
$('.select2-search__field')[1].placeholder='All Locations';
$('.select2-search__field').width(173);

я запускаю Select2 4.0.3

Я пробовал выше решения, но никто не работал с версией 4x.

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

selector.find('option:not(:first)').remove().trigger('change');

Я пробовал эти решения, но это не сработало для меня.

это своего рода Хак, где вы не должны вызвать изменения.

$("select").select2('destroy').val("").select2();

или

$("select").each(function () { //added a each loop here
        $(this).select2('destroy').val("").select2();
});

С помощью select2 версии 3.2 это сработало для меня:

$('#select2').select2("data", "");

не нужно выполнять initSelection

по состоянию на V. 4. 0.икс...

чтобы очистить значения, но и восстановить использование заполнителя...

.html('<option></option>');  // defaults to placeholder

если он пуст, он выберет первый элемент опции вместо того, что может быть не то, что вы хотите

.html(''); // defaults to whatever item is first

откровенно...Select2-это такая боль в заднице, меня удивляет, что ее не заменили.

для держателя места

$("#stateID").select2({
    placeholder: "Select a State"
});

для сброса выберите 2

$('#stateID').val('');
$('#stateID').trigger('change');

надеюсь, что это помогает

перед тем, как очистить значение с помощью этого $("#customers_select").select2("val", ""); Попробуйте установить фокус на любой другой элемент управления при нажатии кнопки сброса.

это снова покажет заполнитель.

интерфейс DOM, уже отслеживает начальное состояние...

поэтому достаточно сделать следующее:

$("#reset").on("click", function () {
    $('#my_select option').prop('selected', function() {
        return this.defaultSelected;
    });
});

Ну всякий раз, когда я сделал

$('myselectdropdown').select2('val', '').trigger('change');

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

поскольку у меня есть параметры allowClear, установленные в true, я пошел с

$('.select2-selection__clear').trigger('mousedown');

за этим может следовать $('myselectdropdown').select2 ('close'); триггер события на элементе select2 dom в случае, если вы хотите закрыть открытое предложение drop вниз.

один [очень] хаки способ сделать это (я видел, что это работает для версии 4.0.3):

var selection = $("#DelegateId").data("select2").selection;
var evt = document.createEvent("UIEvents");
selection._handleClear(evt);
selection.trigger("toggle", {});
  • allowClear должно быть установлено в true
  • в элементе select должен существовать пустой параметр

попробовав первые 10 решений здесь и потерпев неудачу, я нашел этой решение для работы (см." Нилов прокомментировал 7 апреля • отредактировано " комментарий вниз по странице):

(function ($) {
   $.fn.refreshDataSelect2 = function (data) {
       this.select2('data', data);

       // Update options
       var $select = $(this[0]);
       var options = data.map(function(item) {
           return '<option value="' + item.id + '">' + item.text + '</option>';
       });
       $select.html(options.join('')).change();
   };
})(jQuery);

затем производится изменение:

var data = [{ id: 1, text: 'some value' }];
$('.js-some-field').refreshDataSelect2(data);

(автор изначально показал var $select = $(this[1]);, который комментатор исправил на var $select = $(this[0]);, который я показал выше.)

мое решение:

$el.off('select2:unselect')
$el.on('select2:unselect', function (event) {
    var $option = $('<option value="" selected></option>');
    var $selected = $(event.target);

    $selected.find('option:selected')
             .remove()
             .end()
             .append($option)
             .trigger('change');
    });
$('myselectdropdown').select2('val', '0')

где 0-ваше первое значение выпадающего списка

используйте этот код в свой js-файл

$('#id').val('1');
$('#id').trigger('change');

чтобы сбросить значения и заполнитель, я просто повторно инициализирую элемент select2:

$( "#select2element" ).select2({
    placeholder: '---placeholder---',
    allowClear: true,
    minimumResultsForSearch: 5,
    width:'100%'
});

Comments

    Ничего не найдено.