<select>
元素样式复写插件。
本插件只提供样式重写及基本的功能,如果需要更高级的功能,请参考:
<select data-am-selected>
<option value="a">Apple</option>
<option value="b" selected>Banana</option>
<option value="o">Orange</option>
<option value="m">Mango</option>
<option value="d" 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>
<select multiple data-am-selected>
<optgroup label="水果">
<option value="a">Apple</option>
<option value="b">Banana</option>
<option value="o">Orange</option>
<option value="m">Mango</option>
</optgroup>
<optgroup label="装备">
<option value="phone">iPhone</option>
<option value="im">iMac</option>
<option value="mbp">Macbook Pro</option>
</optgroup>
</select>
btnWidth
: 按钮宽度,数字或者百分比,btnWidth: '50%'
btnSize
: 按钮尺寸,[xl|lg|sm|xs]
(参见 Button)btnStyle
: 按钮风格,[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 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>
<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>
基于 jQuery :contains
选择符实现的简易搜索。
<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>
v2.5
新增:设置 maxchecked
属性以后,超出设定值时会触发 checkedOverflow.selected.amui
事件,可以监听该事件提示用户。
<select multiple data-am-selected minchecked="2" maxchecked="3" id="demo-maxchecked">
<option value="a">Apple</option>
<option value="b">Banana</option>
<option value="o">Orange</option>
<option value="m">Mango</option>
</select>
<script>
$('#demo-maxchecked').on('checkedOverflow.selected.amui', function() {
alert('最多选择' + this.getAttribute('maxchecked') + '项');
});
</script>
v2.3 新增!
使用 JS 操作 <select>
(如添加选项、禁用选项、选中选项等),需要重新渲染下拉菜单。
changed.selected.amui
事件。需要注意的是:
// 使用 `attr()` 可以被 MutationObserver 观察到
$('select').find('option').eq(1).attr('selected', true);
// 以下操作不会被 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">添加选项</button>
<button type="button" data-selected="toggle" class="am-btn am-btn-secondary">交替 Orange 选中状态</button>
<button type="button" data-selected="disable" class="am-btn am-btn-danger">交替 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 +'">动态插入的选项 ' + i + '</option>');
i++;
}
if (action === 'toggle') {
$o.attr('selected', !$o.get(0).selected);
}
if (action === 'disable') {
$m[0].disabled = !$m[0].disabled;
}
// 不支持 MutationObserver 的浏览器使用 JS 操作 select 以后需要手动触发 `changed.selected.amui` 事件
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(''));
});
});
<form action="" data-am-validator>
<select name="test" data-am-selected required>
<option value=""></option>
<option value="a">Apple</option>
<option value="b">Banana</option>
<option value="o">Orange</option>
</select>
<p>
<button class="am-btn am-btn-primary">提交</button>
</p>
</form>
给 <select>
元素添加 data-am-selected
属性(可设置相关参数),如上面的示例所示。
通过 $('select').selected(options)
启用样式复写。
$(function() {
// 使用默认参数
$('select').selected();
// 设置参数
$('select').selected({
btnWidth: '300px',
btnSize: 'sm',
btnStyle: 'primary',
maxHeight: '100px'
});
});
btnWidth: null
: 按钮宽度,默认为 200px
btnSize: null
: 按钮尺寸,可选值为 xl|sm|lg|xl
btnStyle: 'default'
: 按钮样式,可选值为 primary|secondary|success|warning|danger
maxHeight: null
: 列表最大高度dropUp: 0
: 是否为上拉,默认为 0
(false
)placeholder
: 占位符,默认读取 <select>
的 placeholder
属性,如果没有则为 点击选择...
$().selected('disable')
: 禁用选框(v2.5
)$().selected('enable')
: 启用选框(v2.5
)$().selected('destroy')
: 销毁实例事件名称 | 描述 |
---|---|
checkedOverflow.selected.amui | 超出设定的最多可选值时触发(v2.5 新增) |
如果项目中同时使用了 jQuery Form,$.fn.selected
有命名冲突:
2.4.1
以前的版本:请使用 $('select').selectIt(options)
替代;2.4.1
及以后版本:
在 amazeui.js
之后引入 jquery.form.js
,否则 jQuery Form 可能无法正常工作,然后执行以下代码(在线演示):
// 重新注册一个 jQuery 插件
AMUI.plugin('mySelected', AMUI.selected);
// 初始化插件
$('#my-select').mySelected();
或者:
在 amazeui.js
之前引入 jquery.form.js
,然后按照以下方式调用(演示):
// 恢复 jQuery Form 插件的 $.fn.selected,
// 并把 Amaze UI selected 重新赋值给 $.fn.amSelected
$.fn.amSelected = $.fn.selected.noConflict();
// 使用 Amaze UI 的 selected
$('[data-am-selected]').amSelected();
<select>
(单选)默认选择第一项的问题 缺省选中第一个 <option>
是 HTML 规范中 <select>
元素(单选)的默认行为。Selected 遵循了一致的行为,和规范保持一致。
有用户提出默认不选中第一项的需求,v2.5
增加了这个功能,只需将第一项设置为空的 <option>
即可。
<select data-am-selected placeholder="选一个撒" id="demo-default-selected">
<option selected value=""></option>
<option label="01 - Proprietary" value="01">01 - Proprietary</option>
<option label="02 - ISBN-10" value="02">02 - ISBN-10</option>
<option label="03 - GTIN-13" value="03">03 - GTIN-13</option>
<option label="04 - UPC" value="04">04 - UPC</option>
<option label="05 - ISMN-10" value="05">05 - ISMN-10</option>
</select>