Skip to content

Listbox

Methods

add()

Added items are returned. Check the "real world example": Populate with an array

SDB.Listbox.add( element, 'string' ); // Or an array of strings

remove()

Remove item using indexes. This one doesn't take in arrays.

SDB.Listbox.remove( element, 1 );

empty()

Target element should be the .list-box item and not its child items.

SDB.Listbox.empty( element );

toggle()

Toggles the selection of an item with the specified index or text content.

SDB.Listbox.toggle( element, 1 );
SDB.Listbox.toggle( element, 'string' );

select()

Selects an item with the specified index or text content.

SDB.Listbox.select( element, 1 );
SDB.Listbox.select( element, 'string' );

deselect()

Deselects an item with the specified index or text content.

SDB.Listbox.deselect( element, 1 );
SDB.Listbox.deselect( element, 'string' );

deselectAll()

Deselects all items. Target element .list-box.

SDB.Listbox.deselectAll( element );

selection()

Returns an array of indexes or item text content.

SDB.Listbox.selection.index( element);
SDB.Listbox.selection.text( element );

onSelect eventlistener

element.addEventListener("onSelect", function(e) {
  console.log( e.detail );
});

Real world examples

Add an item

var listbox = SDB.id(1);
var addedItems = SDB.Listbox.add( listbox, ['Item 1', 'Item 2', 'Item 3'] );
console.log( addedItems );

Populate with an array

var listbox = SDB.id(1);
var addedItems = SDB.Listbox.add( listbox, ['Item 1', 'Item 2', 'Item 3'] );
console.log( addedItems );

Select item if text is equal to

SDB.Listbox.select( SDB.id(1), 'Item 2' );

Fetch all selected items

SDB.Listbox.selection.text( SDB.id(1) );

Deselect all

var listbox = SDB.id(1);
SDB.Listbox.deselectAll( listbox );

Select all items with the click of a button

var listbox = SDB.id(1);
var listboxItems = pickAll('li', listbox);
var button = SDB.id(2);

button.addEventListener("click", function() {
  for( var item of listboxItems ) {
    item.classList.add('selected');
  }
});

How to disable listbox items?

To disable listbox items, you need to get a bit tricky. You can't use SDB.disable.id or SDB.disable.name because Listbox items don't have either. Also there is no method for disabling with index. The only thing left is the SDB.disable.element(), which may also be difficult since they don't have any distinct hooks you can latch onto. The snippet below gets the element based on its index.

If you're populating the listbox yourself, you could easily scatter around classes and/or data-attributes that you can target later on for disabling purposes or something else.

This snippet disables the second item in the specified list.

var listBox = SDB.id(1);
var listItem2 = selectAll('li', listBox)[1];
SDB.disable.element( listItem2 );

HTML structure

The HTML might be slightly cleaned up to make it easier to to read.

<div class="list-box" data-item-type="listbox" data-item-id="1" data-item-parent-id="0">
  <div class="inner-wrap">
    <ul>
      <li class="selected"><span>Item 1</span></li>
      <li><span>Item 2</span></li>
    </ul>
  </div>
</div>