2014-11-29 14 views
5

Mam tablicę Boypstrap Selpickers do filtrowania wyników z bazy danych. Potrzebuję sposób resetowania wszystkie selectpickers do 'Nothing Selected', to jest mój kod:Bootstrap Selektor zaznaczenia nie zostanie zresetowany za pomocą wbudowanych funkcji

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

Spróbuj zresetować wszystkie zbieraczy:

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

Jak widać, wypróbowałem wszystkie funkcje, aby ponownie ustawić, ale bezskutecznie, więc oczywiście robię coś złego w górę logiki.

+1

Próbowałem swój kod 'zresetować' fragment , a to odznaczyło moje wybrane pola. Więc to mogło zostać naprawione odkąd miałeś ten problem. Tylko komentarz dla kogoś później. – jonas

+0

Jesteś prawdziwym MVP. Jeśli sprawdzisz github silviomoreto (https://github.com/silviomoreto/bootstrap-select), zobaczysz, że drastycznie zmienił kod w ciągu ostatnich kilku lat. v1.6.3 -> v1.12.2 – Edward

Odpowiedz

1

Więc spojrzałem w pliku selectpicker.js funkcje deselectAll i selectAll zarówno filtrować swoje odpowiednie opcje o kilka argumentów (patrz linia 884):

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

Mała awaria:

.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!? 

Moim problemem było .filter(':visible'), lista nie była widoczna po wywołaniu zdarzenia kliknięcia, więc te opcje zostały odfiltrowane i dlatego nie uzyskały "klickiego" ked '/' odznaczony '. Poprawiłem moją wersję wtyczki, a teraz mój przycisk "reset" działa zgodnie z oczekiwaniami. Nowa linia jest:

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

12

mam rozwiązanie z następujących code.Try to

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

A także można spróbować dzisiaj to

$("#listID").val('').selectpicker('refresh'); 
Powiązane problemy