Font Face
Teva Sans Latin

Drafts & Templates
PBS Templates

Primitives & components context

Primitives & components: Teva Global

Multiple Select

v0.0.0

Please prefer Multiple Select v3 over this component.

Multiple select component provides the ability to select more than 1 values from a dropdown.

Change data-placeholder-format to control what should be the feedback for the user once values are selected, {0} will be changed with the selected values count.

If only 1 option is selected, the text of the label for the option will become the placeholder text.

Add data-saved-elements to trigger preselected values where the value should be the names of the preselected inputs joined by "|" symbol.


Reload the component via AJAX
<div id="reload">
  <!-- Multiple Select  -->
  <div class="vi-multiple-select" data-placeholder-format="{0} features selected" data-saved-elements="name-7051e7|name-11ebb4">
    <label class="vi-multiple-select__label mb-0" for="dropdown-trigger">Label</label>
    <form action="#form-31886e" autocomplete="off" class="vi-form vi-form--accent vi-typesystem" data-validate="true" novalidate="">
      <div class="custom-select custom-select-sm vi-multiple-select__trigger" id="dropdown-trigger">
        Features
      </div>
      <div class="vi-multiple-select__dropdown">
        <div class="form-group">
          <div class="custom-checkbox custom-control">
            <input class="custom-control-input" id="control-87b15b1" name="name-7051e7" type="checkbox">
            <label class="custom-control-label" for="control-87b15b1">
              Disrupt cleanse yr.
            </label>
          </div>
          <div class="custom-checkbox custom-control">
            <input class="custom-control-input" id="control-33984c1" name="name-77a1bd" type="checkbox">
            <label class="custom-control-label" for="control-33984c1">
              Tilde vinyl farm-to-table.
            </label>
          </div>
          <div class="custom-checkbox custom-control">
            <input class="custom-control-input" id="control-178b7a1" name="name-11ebb4" type="checkbox">
            <label class="custom-control-label" for="control-178b7a1">
              Twee gastropub 90's.
            </label>
          </div>
          <div class="custom-checkbox custom-control">
            <input class="custom-control-input" id="control-00a7151" name="name-1e62c1" type="checkbox">
            <label class="custom-control-label" for="control-00a7151">
              Semiotics slow-carb aesthetic.
            </label>
          </div>
          <div class="custom-checkbox custom-control">
            <input class="custom-control-input" id="control-4f1b0d" name="name-2e5a3" type="checkbox">
            <label class="custom-control-label" for="control-4f1b0d">
              Vegan brunch.
            </label>
          </div>
          <div class="custom-checkbox custom-control">
            <input class="custom-control-input" id="control-8a2c9e" name="name-7d4f1" type="checkbox">
            <label class="custom-control-label" for="control-8a2c9e">
              Artisanal coffee.
            </label>
          </div>
          <div class="custom-checkbox custom-control">
            <input class="custom-control-input" id="control-3b5d1f" name="name-9e2h8" type="checkbox">
            <label class="custom-control-label" for="control-3b5d1f">
              Craft beer scene.
            </label>
          </div>
          <div class="custom-checkbox custom-control">
            <input class="custom-control-input" id="control-6k9m4n" name="name-5t7p2" type="checkbox">
            <label class="custom-control-label" for="control-6k9m4n">
              Vintage boutique.
            </label>
          </div>
        </div>
        <div class="vi-flexbox">
          <button class="vi-btn-outline vi-btn-outline--no-pointer vi-btn" type="button">Cancel</button>
          <button class="vi-btn-solid vi-btn-solid--no-pointer vi-btn" type="submit">Apply</button>
        </div>
      </div>
    </form>
  </div>
</div>
<hr>
<!-- Button type: solid  -->
<a id="trigger" href="#" class="vi-btn-solid vi-btn">Reload the component via AJAX</a>
<script>
  $(document).ready(function() {
    $('#trigger').click(function() {
      $('#reload').load('/api/multiple-select/reload', () => {
        $('#reload').find('.vi-multiple-select').viMultipleSelect();
      });
    });
  });
</script>

Multiple select component but with radios (similar to a simple select component ?)

<!-- Multiple Select  -->
<div class="vi-multiple-select" data-placeholder-format="{0} features selected">
  <label class="vi-multiple-select__label mb-0" for="dropdown-trigger">Label</label>
  <form action="#form-31886e" autocomplete="off" class="vi-form vi-form--accent vi-typesystem" data-validate="true" novalidate="">
    <div class="custom-select custom-select-sm vi-multiple-select__trigger" id="dropdown-trigger">
      Features
    </div>
    <div class="vi-multiple-select__dropdown">
      <div class="form-group">
        <div class="custom-radio custom-control">
          <input aria-required="true" class="custom-control-input" id="control-66404d" name="name-b3e502" required="" type="radio">
          <label class="custom-control-label" for="control-66404d">
            Tofu cliche hella.
          </label>
        </div>
        <div class="custom-radio custom-control">
          <input aria-required="true" class="custom-control-input" id="control-91c64c" name="name-b3e502" required="" type="radio">
          <label class="custom-control-label" for="control-91c64c">
            Tacos gluten-free iphone.
          </label>
        </div>
        <div class="custom-radio custom-control">
          <input aria-required="true" class="custom-control-input" id="control-9e08d5" name="name-b3e502" required="" type="radio">
          <label class="custom-control-label" for="control-9e08d5">
            Gentrify kinfolk brooklyn.
          </label>
        </div>
      </div>
      <div class="vi-flexbox">
        <button class="vi-btn-outline vi-btn-outline--no-pointer vi-btn" type="button">Cancel</button>
        <button class="vi-btn-solid vi-btn-solid--no-pointer vi-btn" type="submit">Apply</button>
      </div>
    </div>
  </form>
</div>

Stylesheets #

The following stylesheets are required to display this component.

The following additional stylesheets are used to display the example(s).


JavaScript #

The following javascript is required to display this component.


Usage documentation #

Usage documentation can be found here.


Changelog #

Changelog

Fix

  • 03 Apr 2025 - fix(multiple-select): clear the focus outline, while keeping scroll
  • 31 Dec 2024 - fix(multiple-select): use textContent instead of innerText as innerText won’t return hidden elements. Missed one.
  • 27 Dec 2024 - fix(multiple-select): use textContent instead of innerText as innerText won’t return hidden elements. Chapeau to Andrei for the example.
  • 20 Dec 2024 - fix(multiple-select): build savedElement list first from checked than from data-attribute
  • 20 Dec 2024 - fix(multiselect): Fixed multiselect not reloading to correct state after ajax.
  • 19 Jan 2024 - Fixed multiselect not closing when clicking other multiselect.
  • 29 Nov 2023 - Fixed clearing saved elements when reseted from outside.
  • 10 Oct 2023 - Refactored code to match library standards and improve overall code structure and logic.
  • 07 Jun 2023 - Single select must show selected label.
  • 10 May 2023 - Fix missing dependency in docs on flexbox.

Added

  • 11 Jun 2024 - Added scroll for options in multiselect
  • 19 Jan 2024 - Added functionality for label click to open multiselect.
  • 29 Nov 2023 - Added functionality for multiselect to have own reset and also work if reseted from outside form reset.
  • 10 Oct 2023 - Added functionality to preselect values.