创建一个统一样式的下拉输入、选择框元素,或者解析转换页面上的 select 标签为该元素。
new(options?: DropdownOptions): Dropdown
下拉输入、选择框的初始参数,结构为
interface DropdownOptions {
textkey?: string;
valuekey?: string;
htmlkey?: string;
maxlength?: Number;
multiselect?: boolean;
selected?: string;
selectedlist?: Array<DropdownItem | any>;
disabled?: boolean;
input?: boolean;
search?: boolean;
searchkeys?: Array<string>;
searchplaceholder?: string;
tabindex?: Number;
placeholder?: string;
slidefixed?: boolean;
parent?: HTMLElement;
}
数据源中用以显示的属性,默认为 text
数据源中作为值的属性,默认为 value
数据源中用来以 html 方式呈现的属性,默认为 html
作为输入类型时的最大允许字符数,默认为 500
是否允许多选,仅在选择类型下有效
默认选中的项目的值
多选时默认选中的项目的值的列表
初始化时下拉框是否禁用
是否为输入类型
是否允许搜索
搜索时搜索的数据源属性的列表,默认为 [valuekey]
搜索输入框的占位字符串
下拉框的焦点顺序
作为输入类型时,输入框的占位字符串
下拉方向是否固定为下
下拉列表呈现的父容器,默认为 document.body
static resolve(dom?: HTMLElement): HTMLElement
将把此 HTML 元素,为 null 则把 document.body 下的所有 select 元素解析为统一样式的下拉框
sourceFilter: () => Array<DropdownItem | any>
数据源代理,返回用以呈现在下拉列表中的数据源
onselected: (item: DropdownItem | any) => void
选中项发生改变时触发该事件,参数为选中的项
onselectedlist: (list: Array<DropdownItem | any>) => void
多选时选中列表发生改变时触发该事件,参数为选中的列表
onexpanded: () => void
下拉列表展开时触发该事件,一般用来异步获取服务器数据,填充至数据源
property disabled(): boolean
获取或设置下拉框是否禁用
property source(): Array<DropdownItem | any>
获取或设置下拉框数据源
readonly multiselect: boolean
获取下拉框是否支持多选
readonly selected: DropdownItem | any
获取下拉框当前选中项
readonly selectedlist: Array<DropdownItem | any>
获取下拉框当前选中的列表
create(): HTMLElement
创建下拉列表,返回一个 HTML 元素
select(selected: string, silence?: boolean): void
修改下拉框的选中项为参数值对应的项
是否静默修改,为 true 时不触发 onselected 事件
selectlist(selectedlist: Array<string>, silence?: boolean): void
修改下拉框的选中列表为参数值列表对应的项的列表
是否静默修改,为 true 时不触发 onselectedlist 事件
<div id="dropdown-sample">
<select>
<option value="cs1">Case 1</option>
<option value="cs2" selected>Case 2</option>
<option value="cs3">Case 3</option>
</select>
</div>
<script type="text/javascript">
const Dropdown = window["lib-ui"].Dropdown;
const sample = document.querySelector('#dropdown-sample');
// 解析 select 元素
Dropdown.resolve(sample);
// 创建简易输入类型下拉框
let drop = new Dropdown({
input: true,
// selected: 'standby',
placeholder: 'asset status',
slidefixed: true
});
drop.source = ['off', 'running', 'standby', 'broken']
.map(it => { return { value: it, text: it } });
sample.appendChild(drop.create());
// 创建自定义显示元素的下拉框
drop = new Dropdown({
selected: '#ff0',
search: true,
// multiselect: true
});
drop.source = [
{ value: '#fff', text: 'White' },
{ value: '#f00', text: 'Red' },
{ value: '#0f0', text: 'Green' },
{ value: '#00f', text: 'Blue' },
{ value: '#ff0', text: 'Yellow' },
{ value: '#0ff', text: 'Cyan' },
{ value: '#f0f', text: 'Magenta' },
];
drop.source.forEach(it => {
const span = document.createElement('span');
span.className = 'drop-item';
span.style.setProperty('--color', it.value);
span.innerText = it.text;
it.html = span;
});
sample.appendChild(drop.create());
</script>