Bootstrap Selectpicker не сбрасывается с помощью встроенных функций


У меня есть массив Bootstrap Selectpickers для фильтрации результатов из базы данных. Мне нужен способ сброса всех selectpickers до "Ничего Не выбрано", это мой код:

HTML

<div class="row">
    <div class="col-md-3">
        <label>By Group</label>
        <select id="groups" name="group" class="form-control selectpicker" multiple></select>
    </div>
    <div class="col-md-3">
        etc...
    </div>
</div>

JS

ajax_fetch('build_group_options', {groupno:groupno}).done(function(html) {
    //var html is a list of options in html format
    $('#groups').html(html).find('option[value=""]').remove();
    //refresh the selectpicker to make sure options are registered in the picker
    $('.selectpicker').selectpicker('refresh');
});

Попробуйте сбросить все пикеры:

$('#reset_filters').click(function() {
    $('.selectpicker').selectpicker('deselectAll');
    $('.selectpicker').selectpicker('render');
    $('.selectpicker').selectpicker('refresh');
    $(this).closest('form').find('.selectpicker').each(function() {
        $(this).selectpicker('render');
    });
});

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

2 5

2 ответа:

Я получил решение из следующего кода.Попробуйте

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

А также вы можете попробовать это

$("#listID").val('').selectpicker('refresh');

Так что я посмотрел в selectpicker.JS file, функции deselectAll и selectAll фильтруют свои соответствующие параметры по нескольким аргументам (см. строку 884):

deselectAll: function () {
  this.findLis();
  this.$lis.not('.divider').not('.disabled').filter('.selected').filter(':visible').find('a').click();
}

Небольшая поломка:

.not('.divider') //prevents the divider receiving a click event! 
.not('.disabled') //ignore any disabled elements
.filter('.selected') / .not('.selected') //depending if its selectAll() or deselectAll()
.filter(':visible') //prevent any non-visible element receiving a click event!?

Моей проблемой был .filter(':visible'), список не был виден, когда событие click было вызвано, поэтому эти параметры были отфильтрованы и, следовательно, не были "нажаты" / "отменены". Я внес изменения в свою версию плагина, и теперь моя кнопка "Сброс" работает, как и ожидалось. Новая линия это:

this.$lis.not('.divider').not('.disabled').filter('.selected').find('a').click();