Multiple select dropdown with filter jQuery plugin.
Improve the useability of HTML <select> elements:
- options are displayed in a dropdown list.
- selected options are marked with a checkbox in the list and a badge at the top.
- easily select all or none.
- type to filter long lists of options.
- use the up/down arrow keys to focus an option and spacebar/enter to select.
- tab cycle to open/close dropdown.
Uses Bootstrap classes for styling. Easily modify CSS to match your theme.
- Load jQuery, Bootstrap, and the plugin bundle in your HTML code.
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"/> ... <link rel="stylesheet" href="filter_multi_select.css"/> <script src="filter-multi-select-bundle.min.js"></script> - Define a
<select>element with name and multiple attributes in your HTML code. Supported optional attributes: disabled - disables the dropdown. - Define
<option>'s with unique value attributes. Supported optional attributes: label - alternate dropdown display text; selected - pre-select this option; disabled - disable this option.<form> ... <select multiple id="pets" name="pets"> <option value="0">Doge</option> <option value="1" selected>Keyboard Cat</option> <option value="2" label="Badger" disabled>Badger Badger Badger</option> ... - Use jQuery to target the
<select>and apply the plugin. The HTML is replaced by the plugin in the DOM.<script> $(function () { $('#pets').filterMultiSelect(); }); </script> - Or append the class
filter-multi-selectto the select element and have it be targeted automatically.<select class="filter-multi-select" multiple id="pets" name="pets"> - Listen to the events
optionselectedandoptiondeselectedto signal changes.<script> $(function () { $('#pets').on('optionselected', function(e) { ... }); }); </script>
The following indexed parameters can be passed to filterMultiSelect() at construction.
placeholderText- text to show as a placeholder when no items are selected. default="nothing selected"filterText- text to show in filter when empty. default="Filter"selectAllText- label for the select all dropdown item. default="Select All"labelText- label to display in the main dropdown. default=""selectionLimit- limit the number of items able to be selected. Choosing1or omitting themultipleattribute turns this into a single select. A value of0means no limit. default="0"caseSensitive- whether filtering is case-sensitive. default=falseallowEnablingAndDisabling- whether programmatically toggling disabled is permitted. default=trueitems- array of additional items to append to options in dropdown. Each array entry should have the form:
[label:string, value:string, selected?=false, disabled?=false]
The following methods are exposed on the plugin:
hasOption(value:string)- returns true if this dropdown has an option with the specified value attribute, otherwise false.selectOption(value:string)- selects the option with the specified value attribute, otherwise does nothing if it does not exist or if it is disabled.deselectOption(value:string)- deselects the option with the specified value attribute, otherwise does nothing if it does not exist or if it is disabled.isOptionSelected(value:string)- returns true if the option with the specified value attribute exists and is selected, otherwise false.enableOption(value:string)- enables the option with the specified value attribute, otherwise does nothing if it does not exist or if enabling is not permitted.disableOption(value:string)- disables the option with the specified value attribute, otherwise does nothing if it does not exist or if disabling is not permitted.isOptionDisabled(value:string)- returns true if the option with the specified value attribute exists and is disabled, otherwise false.enable()- enables this dropdown, otherwise does nothing if enabling is not permitted.disable()- disables this dropdown, otherwise does nothing if disabling is not permitted.selectAll()- selects all non-disabled options.deselectAll()- deselects all non-disabled options.getSelectedOptionsAsJson(includeDisabled=true)- returns a JSON string of the selected options' values.
The following global fields are exposed on the jQuery extension point:
$.fn.filterMultiSelect.selector- the selector string used to automatically target and apply the plugin. default = "select.filter-multi-select"$.fn.filterMultiSelect.applied- a collection of all element groups applied by the plugin.
The following data is available on the optionselected and optiondeselected event object e:
e.detail.label- the display text of the option that was selected/deselected.e.detail.value- the value of the option that was selected/deselected.e.detail.name- the name of the select element from which the option was selected/deselected.


