Filterable Sortable Multi Select In jQuery
File Size: | 3.59 KB |
---|---|
Views Total: | 4229 |
Last Update: | |
Publish Date: | |
Official Website: | Go to website |
License: | MIT |
An advanced multiselect dropdown component where you can sort, filter, check/uncheck the options to provide a better multiple selection experience.
How to use it:
1. Create the HTML for the multiselect dropdown that includes a search field and a list of predefined options as follows:
<div class="dropdown-advanced"> <div class="options-selected dropdown-advanced-fire-action"> Select Options <span class=""></span> </div> <div class="closed container-elements"> <input type="text" value="" placeholder="Search..." class="search-button"> <div class="order-option select-all-option-container"> <label><input class="select-all-option" type="checkbox">Select/Deselect All</label> </div> <div class="order-option re-order-filter" data-action="asc"> Sort A To Z </div> <div class="order-option re-order-filter" data-action="desc"> Sort Z To A </div> <ul> <li><label><input data-id="0" class="item-option" value="Option1" type="checkbox">Option 1</label></li> <li><label><input data-id="1" class="item-option" value="Option2" type="checkbox">Option 2</label></li> <li><label><input data-id="2" class="item-option" value="Option3" type="checkbox">Option 3</label></li> <li><label><input data-id="3" class="item-option" value="Option4" type="checkbox">Option 4</label></li> <li><label><input data-id="4" class="item-option" value="Option5" type="checkbox">Option 5</label></li> </ul> </div> <div class="container-buttons closed" align="center"> <button class="accept">Accept</button> <button class="cancel">Cancel</button> </div> </div>
2. The example CSS for the dropdown.
.dropdown-advanced { width: 50%; display: block; margin: 0 auto; } .dropdown-advanced ul { padding: 0px; margin: 0; } .dropdown-advanced .container-elements.closed { display: none; } .dropdown-advanced .container-buttons.closed { display: none; } .dropdown-advanced button { margin: 10px auto; padding: 10px; cursor: pointer; } .dropdown-advanced button.cancel { /* your own styles */ } .dropdown-advanced button.accept { /* your own styles */ } .dropdown-advanced label { cursor: pointer; } .dropdown-advanced li { list-style: none; padding: 0px; padding: 10px; margin: 0; } .dropdown-advanced .select-all-option-container { /* your own styles */ } .dropdown-advanced li:nth-child(even) { background-color: #f2f2f2; color: #000; } .dropdown-advanced li:nth-child(odd) { background-color: #fff; color: #000; } .dropdown-advanced .opened { border: 1px solid #f2f2f2; } .dropdown-advanced .options-selected { padding: 10px; border: 1px solid #f2f2f2; cursor: pointer; font-weight: bold; } .options-selected span { font-size: 12px; } .dropdown-advanced .search-button { width: 100%; padding: 10px; border: 1px solid #f2f2f2; } .dropdown-advanced .order-option { padding: 10px; border-bottom: 1px solid #f2f2f2; cursor: pointer; }
3. Load the latest jQuery library at the end of the document.
<script src="/path/to/cdn/jquery.slim.min.js"></script>
4. The main JavaScript (jQuery script) to enable the multiselect dropdown.
$(document).ready(function() { $("body").on("click", ".re-order-filter", function() { $('.select-all-option').prop('checked', false); let action = $(this).attr('data-action'), list_elements = []; $('.item-option').each(function(index) { list_elements.push({ name : $(this).val(), id : $(this).attr('data-id'), }); }); if ( action == "asc" ) { list_elements = list_elements.sort((a, b) => { if (a.name < b.name) return -1 return a.name > b.name ? 1 : 0 }); } else { list_elements = list_elements.sort((a, b) => { if (a.name < b.name) return -1 return a.name > b.name ? 1 : 0 }).reverse(); } $('.container-elements ul').html(''); for ( let item = 0; item < list_elements.length; item++ ) { $('.container-elements ul').append(function() { let html = ''; html = '<li><label><input data-id="'+(list_elements[item].id)+'" class="item-option" value="'+(list_elements[item].name)+'" type="checkbox">'+(list_elements[item].name)+'</label></li>'; return html; }); } }); $("body").on("keyup", ".search-button", function() { let search_content = $('.search-button').val().trim().toLowerCase(); if ( search_content.length > 0 ) { $('.item-option').each(function(index) { let content = $(this).val().toLowerCase(), element = $(this); element.parent('label').parent('li').hide(); if ( content.indexOf(search_content) >= 0 ) { element.parent('label').parent('li').show(); } }); } else { $('.item-option').parent('label').parent('li').show(); } }); $("body").on("click", ".container-buttons .accept", function() { $('.dropdown-advanced .container-elements').removeClass('opened'); $('.dropdown-advanced .container-buttons').removeClass('opened'); $('.dropdown-advanced .container-elements').addClass('closed'); $('.dropdown-advanced .container-buttons').addClass('closed'); $('.options-selected span').html('('+($('.item-option:checked').length)+') seleccionados'); $('.search-button').val(""); $('.item-option').parent('label').parent('li').show(); }); $("body").on("click", ".container-buttons .cancel", function() { $('.dropdown-advanced .container-elements').removeClass('opened'); $('.dropdown-advanced .container-buttons').removeClass('opened'); $('.dropdown-advanced .container-elements').addClass('closed'); $('.dropdown-advanced .container-buttons').addClass('closed'); $('.search-button').val(""); $('.item-option').parent('label').parent('li').show(); }); $("body").on("change", ".select-all-option", function() { if ( $(this).is(':checked') ) { $('.item-option').prop('checked', true); } else { $('.item-option').prop('checked', false); } }); $("body").on("click", ".dropdown-advanced-fire-action", function() { if ( $('.dropdown-advanced .container-elements').hasClass('opened') ) { $('.dropdown-advanced .container-elements').removeClass('opened'); $('.dropdown-advanced .container-buttons').removeClass('opened'); $('.dropdown-advanced .container-elements').addClass('closed'); $('.dropdown-advanced .container-buttons').addClass('closed'); } else { $('.dropdown-advanced .container-elements').addClass('opened'); $('.dropdown-advanced .container-buttons').addClass('opened'); $('.dropdown-advanced .container-elements').removeClass('closed'); $('.dropdown-advanced .container-buttons').removeClass('closed'); } }); });
This awesome jQuery plugin is developed by titosobabas. For more Advanced Usages, please check the demo page or visit the official website.