Amaze UI 2.4

JavaScript

Amaze UI styled jQuery plugins and utils.

Selected


A style rewrite of <select> element.

This plugin only provide style rewrite and basic functions. If you need more advanced funcitons, see these for more details:

Example

<select data-am-selected>
  <option value="a">Apple</option>
  <option value="b">Banana</option>
  <option value="o">Orange</option>
  <option value="m">Mango</option>
  <option value="d" disabled>Disabled</option>
</select>
<select multiple data-am-selected>
  <option value="a">Apple</option>
  <option value="b">Banana</option>
  <option value="o">Orange</option>
  <option value="m">Mango</option>
</select>
<select multiple data-am-selected>
  <option value="a">Apple</option>
  <option value="b" selected>Banana</option>
  <option value="o">Orange</option>
  <option value="m" selected>Mango</option>
</select>

Grouped Dropdown Multi-select

<select multiple data-am-selected>
  <optgroup label="Fruits">
    <option value="a">Apple</option>
    <option value="b">Banana</option>
    <option value="o">Orange</option>
    <option value="m">Mango</option>
  </optgroup>
  <optgroup label="Equipments">
    <option value="phone">iPhone</option>
    <option value="im">iMac</option>
    <option value="mbp">Macbook Pro</option>
  </optgroup>
</select>

Size and Color

  • btnWidth: Button width. Number or percentage. E.g. btnWidth: '50%'
  • btnSize: Button size. [xl|lg|sm|xs] (More details in Button).
  • btnStyle: Button style. [primary|secondary|success|warning|danger]
<select data-am-selected="{btnWidth: '40%', btnSize: 'sm', btnStyle: 'secondary'}">
  <option value="a">Apple</option>
  <option value="b">Banana</option>
  <option value="o">Orange</option>
  <option value="m">Mango</option>
</select>

Select with Limited Height

<select data-am-selected="{maxHeight: 100}">
  <option value="a">Apple</option>
  <option value="b">Banana</option>
  <option value="o">Orange</option>
  <option value="m">Mango</option>
  <option value="phone">iPhone</option>
  <option value="im">iMac</option>
  <option value="mbp">Macbook Pro</option>
</select>

Dropup

<select data-am-selected="{dropUp: 1}">
  <option value="a">Apple</option>
  <option value="b">Banana</option>
  <option value="o">Orange</option>
  <option value="m">Mango</option>
  <option value="phone">iPhone</option>
  <option value="im">iMac</option>
  <option value="mbp">Macbook Pro</option>
</select>

Simple search based on jQuery :contains selector.

<select data-am-selected="{searchBox: 1}">
  <option value="a">Apple</option>
  <option value="b">Banana</option>
  <option value="o">Orange</option>
  <option value="m">Mango</option>
  <option value="phone">iPhone</option>
  <option value="im">iMac</option>
  <option value="mbp">Macbook Pro</option>
</select>

Validation

<select multiple data-am-selected minchecked="2" maxchecked="3">
  <option value="a">Apple</option>
  <option value="b">Banana</option>
  <option value="o">Orange</option>
  <option value="m">Mango</option>
</select>

Control Selected with JS

New in v2.3!

JS can help inserting, removing and selecting options in <select>. When modifying the <select>, dropdown menu need to be rerendered.

  • Browsers that support MutationObserver will rerender autometically;
  • Otherwise, changed.selected.amui event need to be manuelly triggered.

Attention:

// MutationObserver can observe any use of `attr()`.
$('select').find('option').eq(1).attr('selected', true);

// Following operations won't be observed by MutationObserver
$('select').val('aa');
$('select').find('option').eq(1).prop('selected', true);
$('select').find('option')(1).selected = true;


<select id="js-selected" data-am-selected>
  <option value="a">Apple</option>
  <option value="b" selected>Banana</option>
  <option value="o">Orange</option>
  <option value="m">Mango</option>
</select>

<hr/>

<button type="button" data-selected="add" class="am-btn am-btn-primary">Insert Option</button>
<button type="button" data-selected="toggle" class="am-btn am-btn-secondary">Troggle Orange</button>
<button type="button" data-selected="disable" class="am-btn am-btn-danger">Troggle Mango</button>

<hr/>
<div id="js-selected-info"></div>
$(function() {
  var $selected = $('#js-selected');
  var $o = $selected.find('option[value="o"]');
  var $m = $selected.find('option[value="m"]');
  var i = 0;

  $('[data-selected]').on('click', function() {
    var action = $(this).data('selected');

    if (action === 'add') {
      $selected.append('<option value="o' + i +'">Dynamically inserted option ' + i + '</option>');
      i++;
    }

    if (action === 'toggle') {
      $o.attr('selected', !$o.get(0).selected);
    }

    if (action === 'disable') {
      $m[0].disabled = !$m[0].disabled;
    }

    // When using browsers that don't support MutationObserver, `changed.selected.amui` event need to be manuelly triggered.
    if (!$.AMUI.support.mutationobserver) {
      $selected.trigger('changed.selected.amui');
    }
  });

  $selected.on('change', function() {
    $('#js-selected-info').html([
      '选中项:<strong class="am-text-danger">',
      [$(this).find('option').eq(this.selectedIndex).text()],
      '</strong> 值:<strong class="am-text-warning">',
      $(this).val(),
      '</strong>'
    ].join(''));
  });
});

Usage

Using Data API

Add data-am-selected to <select> element as shown above.

Using JS

Enable style rewrite using $('select').selected(options).

If the project also contains jQuery Form, $.fn.selected will cause naming confliction. Please use $('select').selectIt(options) instead.

$(function() {
  // 使用默认参数
  $('select').selected();

  // 设置参数
  $('select').selected({
    btnWidth: '300px',
    btnSize: 'sm',
    btnStyle: 'primary',
    maxHeight: '100px'
  });
});

Options

  • btnWidth: null: Button width. Default value is 200px
  • btnSize: null: Button size. Available options include xl|sm|lg|xl
  • btnStyle: 'default': Button style. Available options include primary|secondary|success|warning|danger
  • maxHeight: null: The maximum height.
  • dropUp: 0: Dropup if true. Default value is 0 (false)
侧栏导航
Amaze UI 微信
在微信上关注我们