Скиньте значення select2 та покажіть заповнювач


212

Як встановити заповнення заповнення значень для скидання значень за допомогою select2. У моєму прикладі Якщо клацнути вікна "Місця розташування" або "Класифікація місць", і мій вибір2 має значення, ніж значення 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;
   }
});

Відповіді:


238

Ви повинні визначити select2 як

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

Щоб скинути вибір2

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

7
Я спробував це з <select multiple>, але я отримую помилку: опція 'initSelection' заборонена для Select2, коли вона прикріплена до елемента <select>.
Сорін Постельніку

15
Це не працює для мене. Заповнювач місця все ще не з’являється.
bcr

5
Дивіться відповідь @Lego Stormtroopr нижче, де відображено новий метод відповідно до API Select2. Вищеописаний спосіб застарілий.
Девід

14
Що стосується версії 4.0, це, здається, вже не .select2("val", "")працює.
adamj

31
$("#customers_select").val('').trigger('change') ;Я використав це, і це спрацювало.
Акшай Кулкарні

125

Select2 змінив API:

Select2: select2("val")метод застарілий і буде видалений у пізніших версіях Select2. Використовуйте замість $ element.val ().

Найкращий спосіб зробити це зараз:

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

Редагувати: грудень 2016 р. Коментарі говорять про те, що нижче наведено оновлений спосіб зробити це:

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

136
Це оновлює значення, але щоб воно відображалося правильно, вам доведеться викликати подію зміни. $('#your_select_input').val('').trigger('change')
Санем

5
Це не працює для мене. Заповнювач місця все ще не з’являється.
bcr

3
Це працює для мене з changeдодаванням тригера, але також запускає бібліотеку перевірки, яку ми використовуємо - наразі мені доведеться використовувати застарілу версію.
Дейв Ньютон

6
Це не працює належним чином, використовуючи select2 4.0.2. Він скине вибір та відновить заповнювач, але коли я виберу нове значення (скидання після публікації), я також побачу вибраний варіант "порожній рядок" (тобто поле з лише "х" у ньому).
kounoupis

1
$ ('# your_select_input'). val (''). тригер ('зміни') працює лише тоді, коли надається заповнювач. в іншому випадку порожній рядок буде відображатися як обраний варіант.
amol

116

Прийнята відповідь не працює в моєму випадку. Я намагаюся це зробити, і це працює:

Визначте 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')

2
Я виявив, що, якщо у вас не встановлено заповнення місця, дозвілClear не працює
Dan Tappin

Ні, $('#your_select_input').val('').trigger('change')ні $('#your_select_input').val('');не працює у Firefox
Алекс Арт.

1
це працює для мене, він видаляє всі дані з select2 Я використовую v4.0.3
ClearBoth

8
$ ("# customers_select"). empty (). тригер ("зміни") працює для мене. :)
Мунна Хан

1
'$ ("# customers_select"). empty (). Тригер (' change ')' працював для мене, дякую!
Тахірхан

52

Єдине, що може працювати для мене:

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

Я використовую версію 4.0.3

Довідково

Відповідно до Документації Select2


2
Я також використовую v4.0.3 і $('select2element').val("").trigger("change")теж добре працює.
Рубі

Зауважте, що у вас також має бути порожня <опція> у вашому <виборі>. Якщо ви використовуєте ajax з select2, це допоможе - $ ('# selectFieldId'). Prepend ('<параметр вибрано = "вибрано"> </option>')
musicjerm

20

З Select2 версії 4.0.9 для мене це працює:

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

1
Це зробило мій вибірковий вибір2. Працювали для мене. Дякую.
диша

18

Select2 використовує певний клас CSS, тому простий спосіб її скидання:

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

І ви маєте перевагу, якщо у вас є кілька Select2 в одній формі, всі вони будуть скинуті за допомогою цієї єдиної команди.



11

ВИДАЛИТИ ВИБРАНУ ЦІННІСТЬ

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

ДЛЯ ОЧИСЛЕННЯ ВАРТІСТЬ ОПЦІЇ

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

1
fefe просить змінити текст заповнення. Тож справедлива лише перша частина цієї відповіді.
nterms

2
Так, тому я виділяю заголовок відповідей.
Shanka SMS

2
Перша відповідь справді більше не застосовується від> 4.0. Але другий варіант врятував мене! Це рішення, коли ви хочете дійсно очистити select2. Просто встановити .val (''), щоб вибрати 2, це недостатньо. Вам також потрібно очистити html. Дуже дякую!!!
wazza

9

Я знаю, що це щось старе питання, але це працює для select2 версії 4.0

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

або

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

якщо у вас пов’язані події зміни


Відмінне рішення. Мені довелося додати функцію .last (), щоб орієнтуватися на нещодавно додане поле select2. $('#select2-element').last().val('').trigger('change.select2');
InsParbo

8

Використовуйте наступне, щоб налаштувати 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");

8

Це правильний спосіб:

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

Я використовую останню версію Select2.


6

По-перше, ви повинні визначити select2, як це:

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

Щоб скинути select2, ви просто можете скористатися наступним кодовим блоком:

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

6

Вибрати очищення можна за допомогою

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

Але це не поверне вас до свого заповнювача.

Так що її половина рішення


5

Я спробував вищевказані рішення, але це не спрацювало.

Це свого роду хак, де вам не доведеться викликати зміни.

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

або

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

5

Для користувачів, які завантажують віддалені дані, це скидає select2 до заповнювача, не знімаючи ajax. Працює з v4.0.3:

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

Працював для мене, але моїм тригером була просто «зміна»
Грегорі Р. Саддерт

Це єдине рішення, яке працювало для мене, щоб скинути Select2 з іншого Select2 за допомогою даних Ajax.
IlludiumPu36

5

Отже, для скидання форми деякі з вас матимуть кнопку скидання. Додайте наступний код у тег сценарію

$('.your_btn_class').click(function(){
    $('#select_field_id').val([]);
    $("#select_field_id").select2({
    placeholder: "this is a placeholder",
    });
});

Або просто спорожнити вибране поле, не зберігаючи заповнення:

$('.your_btn_class').click(function(){
    $('#select_field_id').val([]);
 });

3

Для власника місця

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

Для скидання вибору 2

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

Сподіваюсь, це допомагає


2

Дотримуючись рекомендованого способу зробити це. Знайдено в документації 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>

2

У мене також була ця проблема, і це пов'язано з помилкою 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


Здається, у вас є слухач, прив'язаний до changeподії. Спробуйте change.select2запустити - це не запустить прив’язаних слухачів (див. Github.com/select2/select2/isissue/3620 ).
Павло

2

станом на v.4.0.x ...

щоб очистити значення, а також відновити використання заповнювача ...

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

якщо він порожній, він вибере перший варіант, замість якого він може бути не тим, що потрібно

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

чесно кажучи ... Select2 такий біль у задці, мене дивує, що його не замінили.


1

Я спробував вище рішення, але жодне не працювало з версією 4x.

Я хочу досягти: очистіть усі параметри, але не торкайтеся заповнювача. Цей код працює для мене.

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

Якщо ви використовуєте selector.find ('параметр: не (: перший)'). Html (''); це має працювати.
wazza

1

Використовуючи select2 версії 3.2, це працювало для мене:

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

Не потрібно було реалізовувати initSelection


1
Це був, безумовно, найпростіший спосіб для мене. Інші методи для мене не спрацювали.
chevybow

1

Спробувавши перші 10 рішень тут і не вдалося, я знайшов це рішення спрацьованим (див. "Nilov прокоментував 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]);, що я показую вище.)



0

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

Це знову покаже заповнювач.


0

Інтерфейс DOM вже відстежує початковий стан ...

Тому достатньо зробити наступного:

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

0

Ну коли б я не робив

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

Я почав отримувати якесь відставання після якихось трьох-чотирьох тригерів. Я припускаю, що витік пам'яті. Це не в моєму коді, тому що якщо я видаляю цей рядок, моя програма буде відставати.

Оскільки для параметрів enableClear встановлено значення true, я пішов з

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

Після цього може бути $ ('myselectdropdown'). Select2 ('close'); тригер події на елементі select2 dom у випадку, якщо ви хочете закрити відкриту пропозицію, що спадає.


0

Один [дуже] хакітський спосіб це зробити (я бачив, як це працює для версії 4.0.3):

var selection = $("#DelegateId").data("select2").selection;
var evt = document.createEvent("UIEvents");
selection._handleClear(evt);
selection.trigger("toggle", {});
  • enableClear має бути встановлено на true
  • порожній параметр повинен існувати в елементі вибору

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');
    });

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.