Documentation v1.0.0

Preview

Overview

Select2 gives you a customizable select box with support for searching, tagging, remote data sets, infinite scrolling, and many other highly used options. For full documentation please check the plugin's site.

Usage

Select2's CSS and Javascript files are bundled in the global plugin bundles and globally included in all pages:
<link href="assets/plugins/global/plugins.bundle.css" rel="stylesheet" type="text/css"/>
<script src="assets/plugins/global/plugins.bundle.js"></script>

Initialization

  • Select2's CSS is highly customized in sass/vendors/plugins/_select2.scss SCSS file in order to use it as native component within the design system. The SCSS code is compiled into assets/plugins/global/plugins.bundle.css and globally included in all pages.
  • Select2's Javascript is globally initialized with some predefined settings in src/js/vendors/plugins/select2.init.js and the initialization code is bundled within assets/plugins/global/plugins.bundle.js and globally included in all pages.
  • Select2's is globally initialized through data-control="select2" HTML attribute as defined in src/js/components/app.js and some options can be be passed through Select2 Data Attributes.

Basic

Basic examples of Select2 usage with default and solid background input styles:
<select class="form-select" data-control="select2" data-placeholder="Select an option">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>

<select class="form-select form-select-transparent" data-control="select2" data-placeholder="Select an option">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>

<select class="form-select form-select-solid" data-control="select2" data-placeholder="Select an option">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>
Add <option></option> empty option in order to display the placeholder when selection is not made.
Add data-dropdown-parent="#modal_element_id" option to fix uneditable search input when Select2 is used on Bootstrap Modal with tabindex="-1".
Add data-dropdown-parent="body" option to fix dropdown position issue within a modal with long content.

Disabled

Disabled state examples of Select2 usage with default and solid background input styles:
<select class="form-select" data-control="select2" data-placeholder="Select an option" disabled>
    <option></option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>

Group

Use <optgroup> tag to group select options:
<select class="form-select" data-control="select2" data-placeholder="Select an option">
    <optgroup label="Group 1">
        <option value="1">Option 1</option>
        <option value="2">Option 2</option>
        <option value="3">Option 3</option>
    </optgroup>
    <optgroup label="Group 2">
        <option value="1">Option 1</option>
        <option value="2">Option 2</option>
        <option value="3">Option 3</option>
    </optgroup>
</select>

Sizes

Apply the standard Bootstrap input sizes .form-select-sm and .form-select-lg:
<select class="form-select form-select-sm form-select-solid" data-control="select2" data-placeholder="Select an option">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>

<select class="form-select form-select-lg form-select-solid" data-control="select2" data-placeholder="Select an option">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>

Bootstrap Input Group

Mix and match Select2 with .input-group Bootstrap Input Group  components.
.00
USD
<!--begin::Default example-->
<div class="input-group flex-nowrap">
    <span class="input-group-text">
        <i class="ki-duotone ki-notepad-bookmark fs-3"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span><span class="path5"></span><span class="path6"></span></i>
    </span>
    <div class="overflow-hidden flex-grow-1">
        <select class="form-select rounded-start-0" data-control="select2" data-placeholder="Select an option">
            <option></option>
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
            <option value="4">Option 4</option>
            <option value="5">Option 5</option>
        </select>
    </div>
</div>
<!--end::Default example-->

<!--begin::Solid input group style-->
<div class="input-group input-group-solid flex-nowrap">
    <span class="input-group-text">
        <i class="ki-duotone ki-notepad-bookmark fs-3"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span><span class="path5"></span><span class="path6"></span></i>
    </span>
    <div class="overflow-hidden flex-grow-1">
        <select class="form-select form-select-solid rounded-start-0 border-start" data-control="select2" data-placeholder="Select an option">
            <option></option>
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
            <option value="4">Option 4</option>
            <option value="5">Option 5</option>
        </select>
    </div>
</div>
<!--end::Solid input group style-->

<!--begin::Both add-ons-->
<div class="input-group flex-nowrap">
    <span class="input-group-text">
        <i class="ki-duotone ki-calculator fs-3"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span><span class="path5"></span><span class="path6"></span></i>
    </span>
    <div class="overflow-hidden flex-grow-1">
        <select class="form-select rounded-0" data-control="select2" data-placeholder="Select an option">
            <option></option>
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
            <option value="4">Option 4</option>
            <option value="5">Option 5</option>
        </select>
    </div>
    <span class="input-group-text">.00</span>
</div>
<!--end::Both add-ons-->

<!--begin::Both add-ons in solid style-->
<div class="input-group input-group-solid flex-nowrap">
    <span class="input-group-text"><i class="ki-duotone ki-chart-simple fs-3"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span></i></span>
    <div class="overflow-hidden flex-grow-1">
        <select class="form-select form-select-solid rounded-0 border-start border-end" data-control="select2" data-placeholder="Select an option">
            <option></option>
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
            <option value="4">Option 4</option>
            <option value="5">Option 5</option>
        </select>
    </div>
    <span class="input-group-text">USD</span>
</div>
<!--end::Both add-ons in solid style-->

Clear Selection

Add data-allow-clear="true" attribute to allow clearing selected options.
<select class="form-select form-select-solid" data-control="select2" data-placeholder="Select an option" data-allow-clear="true">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2" selected>Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
    <option value="5">Option 5</option>
</select>

Hide Search

Add data-hide-search="true" attribute to hide the search input in the dropdown list.
<select class="form-select form-select-solid" data-control="select2" data-placeholder="Select an option" data-hide-search="true">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2" selected>Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
    <option value="5">Option 5</option>
</select>

Dropdown Width

Use Custom Width Classes  to set dropdown width via data-dropdown-css-class="w-200px" attribute:
<select class="form-select form-select-solid" data-control="select2" data-dropdown-css-class="w-200px" data-placeholder="Select an option" data-hide-search="true">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2" selected>Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
    <option value="5">Option 5</option>
</select>

Multiple Selection

Declare a selectbox with multiple="multiple" attribute to allow multiple selection with a tag control.
<select class="form-select form-select-solid" data-control="select2" data-close-on-select="false" data-placeholder="Select an option" data-allow-clear="true" multiple="multiple">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>

<select class="form-select form-select-sm form-select-solid" data-control="select2" data-close-on-select="false" data-placeholder="Select an option" data-allow-clear="true" multiple="multiple">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>

<select class="form-select form-select-lg form-select-solid" data-control="select2" data-placeholder="Select an option" data-allow-clear="true" multiple="multiple">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>

Hierarchical Options

Use <optgroup></optgroup> tag to display options in single level groups:
<select class="form-select form-select-solid" data-control="select2" data-placeholder="Select an option" data-allow-clear="true">
    <option></option>
    <option value="1">Option 1</option>
    <option value="2" selected>Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
    <option value="5">Option 5</option>
</select>

Bootstrap Modal

Use Select2 within Bootstrap Modal:
<!--begin::Modal-->
<div class="modal fade" tabindex="-1" id="kt_modal_1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Modal title</h5>
                
                <!--begin::Close-->
                <div class="btn btn-icon btn-sm btn-active-light-primary ms-2" data-bs-dismiss="modal" aria-label="Close">
                    <span class="svg-icon fs-2x"></span>
                </div>
                <!--end::Close-->
            </div>

            <div class="modal-body">
                <div class="mb-10">
                    <label for="" class="form-label">Modal example</label>
                    <select class="form-select form-select-solid" data-control="select2" data-dropdown-parent="#kt_modal_1" data-placeholder="Select an option" data-allow-clear="true">
                        <option></option>
                        <option value="1">Option 1</option>
                        <option value="2">Option 2</option>
                        <option value="3">Option 3</option>
                        <option value="4">Option 4</option>
                        <option value="5">Option 5</option>
                        <option value="6">Option 6</option>
                        <option value="7">Option 7</option>
                        <option value="8">Option 8</option>
                        <option value="9">Option 9</option>
                        <option value="10">Option 10</option>
                    </select>
                </div>
            </div>

            <div class="modal-footer">
                <button type="button" class="btn btn-light" data-bs-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Save changes</button>
            </div>
        </div>
    </div>
</div>
<!--end::Modal-->

Countries With Flags

Initialize Select2 programmatically and add data-kt-select2-country attribute with the path to the country flag to create a list with country icons.
// Format options
var optionFormat = function(item) {
    if ( !item.id ) {
        return item.text;
    }

    var span = document.createElement('span');
    var imgUrl = item.element.getAttribute('data-kt-select2-country');
    var template = '';

    template += '<img src="' + imgUrl + '" class="rounded-circle h-20px me-2" alt="image"/>';
    template += item.text;

    span.innerHTML = template;

    return $(span);
}

// Init Select2 --- more info: https://select2.org/
$('#kt_docs_select2_country').select2({
    templateSelection: optionFormat,
    templateResult: optionFormat
});
<div class="form-floating border rounded">
    <select class="form-select form-select-transparent" placeholder="..." id="kt_docs_select2_country">
        <option></option>
        <option value="AF" data-kt-select2-country="assets/media/flags/afghanistan.svg">Afghanistan</option>
        <option value="AX" data-kt-select2-country="assets/media/flags/aland-islands.svg">Aland Islands</option>
        ...
    </select>
    <label for="kt_docs_select2_country">Select a country</label>
</div>

Users With Avatars

Initialize Select2 programmatically and add data-kt-select2-user attribute with the path to the user avatar to create a list with user portraits.
// Format options
var optionFormat = function(item) {
    if ( !item.id ) {
        return item.text;
    }

    var span = document.createElement('span');
    var imgUrl = item.element.getAttribute('data-kt-select2-user');
    var template = '';

    template += '<img src="' + imgUrl + '" class="rounded-circle h-20px me-2" alt="image"/>';
    template += item.text;

    span.innerHTML = template;

    return $(span);
}

// Init Select2 --- more info: https://select2.org/
$('#kt_docs_select2_country').select2({
    templateSelection: optionFormat,
    templateResult: optionFormat
});
<div class="form-floating border rounded">
    <select class="form-select form-select-transparent" data-placeholder="..." id="kt_docs_select2_users">
        <option></option>
        <option value="0" data-kt-select2-user="assets/media/avatars/300-6.jpg">Emma Smith</option>
        <option value="1" data-kt-select2-user="assets/media/avatars/300-1.jpg">Max Smith</option>
        ...
    </select>
    <label for="kt_docs_select2_users">Select a user</label>
</div>

Rich Content

Initialize Select2 programmatically and add data-kt-rich-content-icon attribute with the path to the user avatar to create a list with user portraits. Additionally, add data-kt-rich-content-subcontent attribute to include additional sub content elements.
// Format options
const optionFormat = (item) => {
    if (!item.id) {
        return item.text;
    }

    var span = document.createElement('span');
    var template = '';

    template += '<div class="d-flex align-items-center">';
    template += '<img src="' + item.element.getAttribute('data-kt-rich-content-icon') + '" class="rounded-circle h-40px me-3" alt="' + item.text + '"/>';
    template += '<div class="d-flex flex-column">'
    template += '<span class="fs-4 fw-bold lh-1">' + item.text + '</span>';
    template += '<span class="text-muted fs-5">' + item.element.getAttribute('data-kt-rich-content-subcontent') + '</span>';
    template += '</div>';
    template += '</div>';

    span.innerHTML = template;

    return $(span);
}

// Init Select2 --- more info: https://select2.org/
$('#kt_docs_select2_rich_content').select2({
    placeholder: "Select an option",
    minimumResultsForSearch: Infinity,
    templateSelection: optionFormat,
    templateResult: optionFormat
});
<div class="border rounded">
<select id="kt_docs_select2_rich_content" class="form-select form-select-transparent" name="..." data-placeholder="...">
        <option></option>
        <option value="0" data-kt-rich-content-subcontent="..." data-kt-rich-content-icon="assets/media/avatars/300-6.jpg">Option Label 1</option>
        <option value="1" data-kt-rich-content-subcontent="..." data-kt-rich-content-icon="assets/media/avatars/300-6.jpg">Option Label 1</option>
        ...
    </select>
</div>

Floating Labels

Use Select2 with Bootstrap Floating Labels:
<!--begin::Input group-->
<div class="form-floating">
    <select class="form-select">
        <option></option>
    </select>
    <label>Coin Name</label>
</div>
<!--end::Input group-->

<!--begin::Input group-->
<div class="form-floating form-control-solid-bg rounded">
    <select class="form-select form-select-transparent" id="kt_docs_select2_floating_labels_2" data-allow-clear="true">
        <option></option>
    </select>
    <label for="floatingInputValue">Coin Name</label>
</div>
<!--end::Input group-->
var optionFormat = function(item) {
    if ( !item.id ) {
        return item.text;
    }

    var span = document.createElement('span');
    var template = '';

    template += '<img src="' + item.element.getAttribute('data-kt-select2-image') + '" class="rounded-circle h-20px me-2" alt="image"/>';
    template += item.text;

    span.innerHTML = template;

    return $(span);
}

// Init Select2 --- more info: https://select2.org/
$('#kt_docs_select2_floating_labels_1').select2({
    placeholder: "Select coin",
    minimumResultsForSearch: Infinity,
    templateSelection: optionFormat,
    templateResult: optionFormat
});

// Init Select2 --- more info: https://select2.org/
$('#kt_docs_select2_floating_labels_2').select2({
    placeholder: "Select coin",
    minimumResultsForSearch: Infinity,
    templateSelection: optionFormat,
    templateResult: optionFormat
});

Validation States

The standard Bootstrap's Form Validation  classes are supported:
Looks good!
Please choose a username.
<form class="was-validated">
    <div class="mb-10">
        <label for="" class="form-label">Valid state</label>
        <select class="form-select form-select-solid is-valid" data-control="select2" data-placeholder="Select an option" data-allow-clear="true" multiple="multiple">
            <option></option>
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
            <option value="4">Option 4</option>
            <option value="5">Option 5</option>
        </select>
        <div class="valid-feedback">
            Looks good!
        </div>
    </div>

    <div class="0">
        <label for="" class="form-label">Invalid state</label>
        <select class="form-select form-select-solid is-invalid" data-control="select2" data-placeholder="Select an option" data-allow-clear="true" multiple="multiple">
            <option></option>
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
            <option value="4">Option 4</option>
            <option value="5">Option 5</option>
        </select>
        <div id="validationServerUsernameFeedback" class="invalid-feedback">
            Please choose a username.
        </div>
    </div>
</form>
Preview Get Help Buy Now