Layui 自定义下拉选组件

Layui 自定义下拉选组件

基于layui,仿照easyui的combobox做的下拉选。可通过接口获取下拉选值,显示的文本,传值内容可自定义生成。
可绑定选中事件,可做多级联动。
定义常用工具模块common.js,并加载到layui的默认模块中去。
layui.js

u={
	common:'../../utils/common',
}

common.js

layui.define(['form','laydate','carousel','util'],function (e) {
	const {form,laydate,carousel,util}=layui;
	e('common',{
        /**
         * 生成下拉选
         * @param config:参数
         *          id:dom的id
         * 				string:单个dom
         * 				Array:多个dom
         *          url:获取地址
         *          value:<option>的value名
         *          text:<option>text
         * 			getValue:自定义传输值
         * 			getText:自定义显示文本
         *          param:url请求的额外参数
         *          initData:默认option
         *			link:需要联动的下拉选的dom id
         *			select:选中事件
         *	@return <option/>文本
         */
		getSelect(config){
			let f={
                    id:undefined,
                    url:undefined,
                    value:'value',
                    text:'text',
                    getValue:function(v){return v[this.value]},
                    getText:function(t){return t[this.text]},
                    param:{},
                    initData:[{value:'',text:'请选择'}],
                    link:false,
                    select:false,
                    data:[],
                    ...config
                    },
                that=this,
                isArray=Array.isArray(f.id);
            if(isArray){
                f.id.forEach(id=>{
                    $("#"+id).attr("lay-filter",'commonSelect'+id);
                })
            }else{
                $("#"+f.id).attr("lay-filter",'commonSelect'+f.id);
            }
            if(f.link){
            	//获取父下拉选的事件集
                const fns=layui.cache.event['form.select']['commonSelect'+f.link]||[function(){}]
                form.on('select(commonSelect'+f.link+')',function (data) {
                    fns.forEach(fn=>{
                        fn.call(this,data)
                    })
                    //默认第一个参数值为父下拉选的选中值
                    for(let k in f.param){
                        f.param[k]=data.value;
                        break;
                    }
                    f.link=false;
                    getOptions();
                })
            }
            //绑定选中事件
            if(f.select){
                if(isArray){
                    f.id.forEach(id=>{
                        form.on('select(commonSelect'+id+')',function (data) {
                            f.select(data);
                        })
                    })
                }else{
                    form.on('select(commonSelect'+f.id+')',function (data) {
                        f.select(data);
                    })
                }
            }
            //生成option
            function getOptions(){
                if(f.url&&!f.link){
                    f.data=that.getData(f.url,f.param);
                }
                let h='';
                $.each(f.initData,function (i,d) {h+='<option value="'+d.value+'">'+d.text+'</option>';});
                $.each(f.data,function (i,d) {
                    h+='<option value="'+f.getValue(d)+'">'+f.getText(d)+'</option>';
                });
                if(isArray){
                    f.id.forEach(d=>{
                        let a=$("#"+d);
                        a.empty();
                        a.append(h);
                    })
                }else{
                    let a=$("#"+f.id);
                    a.empty();
                    a.append(h);
                }
                form.render('select');
                return h;
            }
            return getOptions();
		}
	})
})

使用

<div class="layui-bg-white padding10 padding-l20 layui-form">
    <span class="layui-badge layui-bg-green">出发地:</span>
    <div class="layui-input-inline margin-l10">
        <label class=""></label>
        <div class="searchBtn">
            <select name="select4" id="startp" lay-search></select>
        </div>
    </div>
    <div class="layui-input-inline">
        <label class=""></label>
        <div class="searchBtn">
            <select name="select4" id="startc" lay-search></select>
        </div>
    </div>
    <div class="layui-input-inline">
        <label class="">区/县</label>
        <div class="searchBtn">
            <select name="select4" id="startd" lay-search></select>
        </div>
    </div>
</div>
<div class="layui-bg-white padding10 margin-b10 padding-l20 layui-form">
    <span class="layui-badge">目的地:</span>
    <div class="layui-input-inline margin-l10">
        <label class=""></label>
        <div class="searchBtn">
            <select name="select4" id="endp" lay-search></select>
        </div>
    </div>
    <div class="layui-input-inline">
        <label class=""></label>
        <div class="searchBtn">
            <select name="select4" id="endc" lay-search></select>
        </div>
    </div>
    <div class="layui-input-inline">
        <label class="">区/县</label>
        <div class="searchBtn">
            <select name="select4" id="endd" lay-search></select>
        </div>
    </div>
    <button class="layui-btn layui-btn-sm" event="addLines" style="position: relative;bottom:30px">添加线路</button>
</div>
<script>
layui.use(['common'],function (com) {
    com.getSelect({
        id:['startp','endp'],//同时渲染多个
        url:'/area/list',
        param:{level:1,parentId:0},
        value:'id',
        text:'areaName',
    })
    com.getSelect({
        id:'startc',
        url:'/area/list',
        param:{parentId:0,level:2},
        value:'id',
        text:'areaName',
        link:'startp'
    })
    com.getSelect({
        id:'startd',
        url:'/area/list',
        param:{parentId:0,level:3},
        value:'id',
        text:'areaName',
        link:'startc'
    })
    com.getSelect({
        id:'endc',
        url:'/area/list',
        param:{parentId:0,level:2},
        value:'id',
        text:'areaName',
        link:'endp'
    })
    com.getSelect({
        id:'endd',
        url:'/area/list',
        param:{parentId:0,level:3},
        value:'id',
        text:'areaName',
        link:'endc'
    })
})
</script>

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: layui下拉树形组件是一款基于layui框架开发的UI组件,可以将数据以树形展示并以下拉列表的形式呈现。该组件拥有简单易用的特点,能够满足页面交互中对树形结构需求的展示。 使用layui下拉树形组件,首先需要引入相关的CSS和JS文件,并初始化一个下拉树形组件的容器。然后,通过调用layui的相关方法,将数据以树形结构的形式渲染到容器中。下拉树形组件支持自定义配置,可以通过配置项设置展开、折叠图标的样式、中节点的回调函数等。 在使用过程中,可以通过调用相关的方法对下拉树形组件进行操作,比如获取中的节点、展开或折叠某个节点等。下拉树形组件支持多级别的树形结构,并且可以进行异步加载数据,提供了丰富的API方法供开发者使用。 总之,layui下拉树形组件是一个方便易用的UI组件,在前端开发中广泛应用于树形结构的展示与择。无论是在后台管理系统还是前端开发中,都具有很好的适用性。 ### 回答2: layui下拉树形组件是一种基于layui前端框架开发的功能强大、使用方便的下拉菜单组件。它可以用于展示树形结构数据,并支持用户择节点。 在使用过程中,我们首先需要引入layui的相关资源文件,并在页面中创建一个select元素作为下拉树形组件的容器。然后,通过调用layui下拉树形组件方法,传入相关参数,即可将数据渲染成树形结构显示在下拉框中。 该组件支持使用JSON格式的数据源,并且可以自定义节点的显示样式、中时的样式,以及节点之间的连接线样式。还可以设置下拉框的宽度、最大高度,以及是否显示搜索框等。 在使用过程中,我们可以通过监听下拉树形组件择事件,获取用户择的节点信息,然后进行相应的操作。另外,该组件还支持节点的展开与折叠操作,以便用户可以方便地查看和择节点。 总之,layui下拉树形组件是一款强大而实用的前端组件,它为开发者提供了方便的树形展示和择功能,可以广泛应用于各种Web应用中。无论是在企业管理系统还是电商平台中,都可以通过使用layui下拉树形组件来提升用户体验,优化界面交互。 ### 回答3: layui是一个基于jQuery的前端UI框架,提供了一系列的常用UI组件。在layui中,下拉树形组件用于展示树形结构的数据,并且支持展开和收起节点,方便用户择。 使用layui下拉树形组件的步骤如下: 1. 导入layui的相关文件,包括css和JavaScript文件。 2. 在页面中添加一个下拉择框的HTML元素。 3. 在JavaScript代码中,使用layui的form模块进行表单渲染。 4. 使用layui的tree模块创建一个树形结构。 5. 通过AJAX请求获取树形结构的数据,并将数据渲染到tree组件中。 6. 设置下拉择框的触发事件,当用户点击下拉框时,展示树形结构。 7. 当用户择节点时,使用事件监听器监听择事件,并将中的节点值设置到下拉框中。 8. 用户提交表单时,获取下拉框中中的节点值,进行相应的处理。 需要注意的是,使用layui下拉树形组件时,需要对数据进行适当的格式化,以满足组件的要求。例如,数据需要是一个数组,每个节点需要包含id和name等属性。同时,需要根据实际需求,设置组件的参数,如展开节点的深度、是否显示复框等。 总结来说,layui下拉树形组件能够方便地展示树形结构的数据,并提供了丰富的功能和配置项,可以满足不同场景下的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值