jQuery MultiSelect

Turn a multiselect list into a nice and easy to use list with checkboxes. This plugin is simply an alternative interface for the native select list element. When you check an option in the plugin the value is selected on the native list. This allows the value to be submitted in a form as well as retreived through normal POST/GET and javascript methods.


I only provide limited support through the Github Issues area. DO NOT ask for support via email, socialmedia, or other means. Also check the closed issues before opening a new issue.

Design Methodology

This plugin is not meant to be a full featured multiselect plugin. I envision this as a multiselect plugin that contains a base set of features that can be enhanced using callbacks by the developer. Because of this I am hesitant on adding functionality but am open to adding callbacks where it makes sense. But feel free to open an issue and suggest a feature request if you feel that most people will benefit from it.





// 4 COLUMNS with custom placeholder text
    columns: 4,
    texts: {
        placeholder: 'Select options'

// RELOAD multiselect (in case you modify options or selected options in the native select list since loading the plugin)

$('select[multiple]').multiselect( 'loadOptions', [{
    name   : 'Option Name 1',
    value  : 'option-value-1',
    checked: false,
    attributes : {
        custom1: 'value1',
        custom2: 'value2'
    name   : 'Option Name 2',
    value  : 'option-value-2',
    checked: false,
    attributes : {
        custom1: 'value1',
        custom2: 'value2'


Option Values Default Description
columns int 1 # of columns to show options
search bool false enable option search/filering
searchOptions object
– delay int 250 time (in ms) between keystrokes until search happens
– showOptGroups bool false show option group titles if no options remaining
– searchText bool true search within option text
– searchValue bool false search within option value
– onSearch function fires before search on options happens
texts object
– placeholder string Select options default text for dropdown
– search string Search search input placeholder text
– selectedOptions string selected selected suffix text
– selectAll string Select all select all text
– unselectAll string Unselect all unselect all text
– noneSelected string None Selected None selected text
selectAll bool false add select all option
selectGroup bool false add select all optgroup option
minHeight number 200 min height of option overlay
maxHeight number null max height of option overlay
maxWidth number null maximum width of option overlay (or selector)
maxPlaceholderWidth number null maximum width of placeholder button
maxPlaceholderOpts number 10 maximum number of placeholder options to show until “# selected” shown instead
showCheckbox bool true display the option checkbox
checkboxAutoFit bool false auto calc space requirements for checkbox instead of css padding on label
onLoad function fires at end of initial loading, hides native select list
onOptionClick function fires after on option is clicked
onControlClose function fires when the options list is closed
onSelectAll function fires when (un)select all is clicked
onPlaceholder function fires when the placeholder txt is updated
optionAttributes array array of attribute keys to copy to the checkbox input


loadOptions( options, overwrite, updateSelect )

Update options of select list. Default state will replace existing list with this one.

  • Set the second parameter to false to append to the list. (default = true)
  • Set the third parameter to false to leave the native select list as is. (default = true)

This will NOT modify the original select list element.

$('select[multiple]').multiselect( 'loadOptions', [{
    name   : 'Option Name 1',
    value  : 'option-value-1',
    checked: false
    name   : 'Option Name 2',
    value  : 'option-value-2',
    checked: false


Update Multiselect list settings after it has been rendered. It accepts the same options listed above.

This will reload the plugin for the select list it references

$('select[multiple]').multiselect( 'settings', { columns: 2 });


Disable the jquery multiselect list and show the native select list.

This is distructive. You will have to reinitialize with all options to enable the plugin for the list.

$('select[multiple]').multiselect( 'unload' );


This is a quick unload/load while maintaining options during plugin initialization.

$('select[multiple]').multiselect( 'reload' );


Reset the element back to its default selected values.

$('select[multiple]').multiselect( 'reset' );


Disable or enable the select list. If no second parameter is passed then true is assumed.

$('select[multiple]').multiselect( 'disable', true );
$('select[multiple]').multiselect( 'disable', false );



Fires after initial loading and hides native select list

onLoad( element )

element: select list element object


Fires after an option is clicked

onOptionClick( element, option )

element: select list element object

option: option element object


Fires when the options list is closed

onControlClose( element )

element: select list element object


Fires when (un)select all is clicked

onSelectAll( element, selected )

element: select list element object

selected: the total number of options selected


Fires when the placeholder txt is updated (only fires if there are selected options)

onPlaceholder( element, placeholder, selectedOpts )

element: select list element object

placeholder: placeholder element object

selectedOpts: selected options


Fires before search on options happens

searchOptions.onSearch( element )

element: select list element object


View Github