2014-11-29 9 views
5

Ich habe ein Array von Bootstrap Selectpickers zum Filtern von Ergebnissen aus einer Datenbank. Ich brauche einen Weg, um alle selectpickers des Zurücksetzens auf 'Nichts ausgewählt', das ist mein Code:Bootstrap Selectpicker wird nicht mit den integrierten Funktionen zurückgesetzt

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

Versuchen Sie, alle Kommissionierer zurück:

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

Wie Sie sehen können, habe ich versucht, alle Funktionen zu re Satz aber vergeblich, so mache ich offensichtlich etwas falsch weiter oben auf der Logik.

+1

Sie heute Code-Schnipsel 'Reset' Versuchen und das hat meine Auswahlboxen abgewählt. Dies könnte behoben worden sein, da Sie dieses Problem hatten. Nur ein Kommentar für jemand anderen später. – jonas

+0

Sie sind der echte MVP. Wenn Sie silviomoretos GitHub (https://github.com/silviomoreto/bootstrap-select) überprüfen, werden Sie feststellen, dass er den Code in den letzten paar Jahren drastisch geändert hat. v1.6.3 -> v1.12.2 – Edward

Antwort

1

So sah ich in der selectpicker.js Datei, die deselectAll und selectAll Funktionen sowohl durch ein paar Argumente, um ihre jeweiligen Optionen filtern (siehe Linie 884):

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

Eine kleine Panne:

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

Mein Problem war die .filter(':visible'), die Liste war nicht sichtbar, wenn das Click-Ereignis ausgelöst wurde, so dass diese Optionen herausgefiltert wurden und daher nicht 'Clic' erhalten ked '/' abgewählt '. Ich habe meine Version des Plugins geändert und nun funktioniert mein "Reset" Button wie erwartet. Die neue Linie ist:

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

12

Ich habe Lösung aus folgenden code.Try es

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

Und auch können Sie versuchen, diese

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