基于layui的select区域联动

基于layui的select区域联动

要实现联动效果注意两点:

第一要可以监听到select的change事件;

第二异步加载的内容,需要重新渲染后才可以 正常使用。

Html结构:

<div class="x-body">
    <form class="layui-form" action="" method="post">
        <div class="layui-form-item">
            <label class="layui-form-label">选择地区</label>
            <div class="layui-input-inline">
                <select name="province" lay-filter="province" id="s_p">
                    <option value="1">请选择省</option>
                </select>
            </div>
            <div class="layui-input-inline">
                <select name="city" lay-filter="city" id="s_c">
                    <option value="1">请选择市</option>
                </select>
            </div>
            <div class="layui-input-inline">
                <select name="area" lay-filter="area" id="s_x">
                    <option value="1">请选择区/县</option>
                </select>
            </div>
        </div>
        <div>
            <label class="layui-form-label">选择地区</label>
            <div class="layui-input-inline">
                <select name="towns" lay-filter="towns" id="s_t">
                    <option value="1">请选择乡镇/街道</option>
                </select>
            </div>
            <!--<div class="layui-input-inline">-->
                <!--<select name="burg" lay-filter="burg" id="s_b">-->
                    <!--<option value="1">庄/村</option>-->
                <!--</select>-->
            <!--</div>-->
        </div>
    </form>
</div>

Js:

<script type="text/javascript">

    layui.use(['form', 'layer', 'laytpl', 'jquery'], function () {
        var form = layui.form
            , $ = layui.jquery;

        var parentId = '0';
        $(function () {
            $.post(serverPath + "sys/area/backProvince/" + parentId, function (result) {
                var p = result;
                for (v in p) {
                    var pp = p[v].id;
                    $("#s_p").append("<option value=" + pp + ">" + p[v].fullname + "</option>")
                }
                form.render();
            })

            form.on('select(province)', function (data) {
                var p = $("#s_p").val();
                if (p != "1") {
                    $.post(serverPath + "sys/area/backProvince/" + p, function (result) {
                        var c = result;
                        $("#s_c").html("");
                        $("#s_c").append("<option value='1'>请选择市</option>");
                        $("#s_x").html("");
                        $("#s_x").append("<option value='1'>请选择县/区</option>");
                        $("#s_t").html("");
                        $("#s_t").append("<option value='1'>请选择乡镇/街道</option>");
                        $("#s_b").html("");
                        $("#s_b").append("<option value='1'>请选择村/街道号</option>");
                        for (v in c) {
                            var cc = c[v].id;
                            $("#s_c").append("<option value=" + cc + ">" + c[v].fullname + "</option>")
                        }
                        form.render();
                    })
                }
            });
            form.on('select(city)', function (data) {
                var c = $("#s_c").val();
                if (c != "1") {
                    $.post(serverPath + "sys/area/backProvince/" + c, function (result) {
                        var x = result;
                        $("#s_x").html("");
                        $("#s_x").append("<option value='1'>请选择县/区</option>");
                        $("#s_t").html("");
                        $("#s_t").append("<option value='1'>请选择乡镇/街道</option>");
                        $("#s_b").html("");
                        $("#s_b").append("<option value='1'>请选择村/街道号</option>");
                        for (v in x) {
                            var xx = x[v].id;

                            $("#s_x").append("<option value=" + xx + ">" + x[v].fullname + "</option>")
                        }
                        form.render();
                    });
                }
            });
            form.on('select(area)', function (data) {
                var x = $("#s_x").val();
                if (x != "1") {
                    $.post(serverPath + 'sys/area/backProvince/'+ x, function (result) {
                        var t = result;
                        $("#s_t").html("");
                        $("#s_t").append("<option value='1'>请选择乡镇/街道</option>");
                        $("#s_b").html("");
                        $("#s_b").append("<option value='1'>请选择村/街道号</option>");
                        for (v in t) {
                            var xx = t[v].id;
                            $("#s_t").append("<option value=" + xx + ">" + t[v].fullname + "</option>")
                        }
                        form.render();
                    });
                }
            });


        });
    });


</script>

总结:

1.select的chage监听事件使用

form.on('select(myselect)', function(data){}) 其中myselect是select的 lay-filter属性值

2.数据异步加载到select的option中之后,点击该select会发现layui的选中效果不起作用,需要使用form.render('select');重新渲染一次,就可以正常使用。

转载于:https://my.oschina.net/zhenggao/blog/1818602

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 layui 中,可以通过使用下拉框的 onchange 事件来实现多级联动效果。具体实现步骤如下: 1. 定义省份、城市、区县的下拉框: ```html <select name="province" lay-filter="province"> <option value="">请选择省份</option> <option value="1">湖南省</option> <option value="2">广东省</option> ... </select> <select name="city" lay-filter="city"> <option value="">请选择城市</option> </select> <select name="district" lay-filter="district"> <option value="">请选择区县</option> </select> ``` 2. 在 JavaScript 中编写下拉框的 onchange 事件: ```javascript <script> layui.use(['form'], function(){ var form = layui.form; // 监听省份下拉框的选择事件 form.on('select(province)', function(data){ // 获取当前选择的省份 var provinceId = data.value; // 清空城市下拉框的选项 $("select[name='city']").html("<option value=''>请选择城市</option>"); // 清空区县下拉框的选项 $("select[name='district']").html("<option value=''>请选择区县</option>"); // 如果省份不为空,则通过 Ajax 请求获取对应的城市列表 if(provinceId != ''){ $.get("/api/city?provinceId="+provinceId,function(data){ // 循环添加城市选项 for(var i=0;i<data.length;i++){ $("select[name='city']").append("<option value='"+data[i].cityId+"'>"+data[i].cityName+"</option>"); } // 重新渲染城市下拉框 form.render('select'); }); } }); // 监听城市下拉框的选择事件 form.on('select(city)', function(data){ // 获取当前选择的城市 var cityId = data.value; // 清空区县下拉框的选项 $("select[name='district']").html("<option value=''>请选择区县</option>"); // 如果城市不为空,则通过 Ajax 请求获取对应的区县列表 if(cityId != ''){ $.get("/api/district?cityId="+cityId,function(data){ // 循环添加区县选项 for(var i=0;i<data.length;i++){ $("select[name='district']").append("<option value='"+data[i].districtId+"'>"+data[i].districtName+"</option>"); } // 重新渲染区县下拉框 form.render('select'); }); } }); }); </script> ``` 3. 在服务器端编写对应的 API 接口,用于根据省份和城市获取对应的城市和区县列表。 以上就是 layui 实现多级联动的简单示例。 ### 回答2: layui是一款基于jQuery的前端UI框架,其中的select多级联动组件可以实现多级下拉菜单之间的关联。使用layuiselect多级联动组件,可以通过简单的代码实现省市区三级联动或其他自定义的多级联动效果。 首先,我们需要引入layui的资源文件,并初始化一个select实例。然后,设置select的外观样式和数据源。 接下来,我们需要定义各级选项的数据源。可以使用数组或JSON对象来表示。第一级的选项数据可以直接写在html中,而后续级的选项数据可以使用layui的form组件的on()方法来监听前一级的选择事件,并根据选择的值动态加载后续级的选项数据。 在监听事件的回调函数中,我们可以根据前一级的选择值来动态生成后续级的选项数据,并使用layuiselect组件的render()方法重新渲染后续级的select实例,实现多级联动的效果。 例如,如果要实现省市区三级联动,可以定义一个省级的select实例,并设置省级选项数据。接着,监听省级select实例的选择事件,在回调函数中根据选择的省份动态生成市级的选项数据,并使用layuiselect组件的render()方法重新渲染市级的select实例。然后,再监听市级select实例的选择事件,在回调函数中动态生成区级的选项数据,并重新渲染区级的select实例。 通过这样的方式,就可以实现layuiselect多级联动的效果。 总之,layuiselect多级联动组件可以方便地实现多级下拉菜单之间的关联,通过监听选择事件和动态生成选项数据来实现联动效果。使用layuiselect多级联动组件可以提升用户体验,增强网站的交互性。 ### 回答3: Layui是一个快速构建前端界面的模块化框架,它提供了多种常用的UI组件。其中的select多级联动是指在一个表单中的多个下拉列表之间建立关联,选择一个下拉列表的选项会影响另一个下拉列表的选项内容。 在Layui中,实现select多级联动有以下几个步骤: 1. 在HTML中定义对应的下拉列表元素,给每个下拉列表元素设置一个唯一的id。 2. 在JavaScript中使用Layui的form模块,使用form.on方法监听每个下拉列表的选择事件。 3. 在监听事件中获取当前选择的选项值,并根据该值设置下一个下拉列表的选项。 下面以一个三级联动为例进行说明: HTML代码: ```html <select id="province"> <option value="">请选择省份</option> <option value="广东省">广东省</option> <option value="江苏省">江苏省</option> </select> <select id="city"> <option value="">请选择城市</option> </select> <select id="district"> <option value="">请选择区县</option> </select> ``` JavaScript代码: ```javascript layui.use('form', function () { var form = layui.form; // 监听省份下拉列表的选择事件 form.on('select(province)', function (data) { var province = data.value; if (province === '广东省') { // 动态设置城市下拉列表的选项 $('#city').html('<option value="广州市">广州市</option><option value="深圳市">深圳市</option>'); } else if (province === '江苏省') { // 动态设置城市下拉列表的选项 $('#city').html('<option value="南京市">南京市</option><option value="苏州市">苏州市</option>'); } else { // 清空城市下拉列表的选项 $('#city').html('<option value="">请选择城市</option>'); } // 清空区县下拉列表的选项 $('#district').html('<option value="">请选择区县</option>'); // 重新渲染下拉列表 form.render('select'); }); // 监听城市下拉列表的选择事件 form.on('select(city)', function (data) { var city = data.value; if (city === '广州市') { // 动态设置区县下拉列表的选项 $('#district').html('<option value="天河区">天河区</option><option value="海珠区">海珠区</option>'); } else if (city === '深圳市') { // 动态设置区县下拉列表的选项 $('#district').html('<option value="福田区">福田区</option><option value="罗湖区">罗湖区</option>'); } else if (city === '南京市') { // 动态设置区县下拉列表的选项 $('#district').html('<option value="玄武区">玄武区</option><option value="鼓楼区">鼓楼区</option>'); } else if (city === '苏州市') { // 动态设置区县下拉列表的选项 $('#district').html('<option value="姑苏区">姑苏区</option><option value="吴中区">吴中区</option>'); } else { // 清空区县下拉列表的选项 $('#district').html('<option value="">请选择区县</option>'); } // 重新渲染下拉列表 form.render('select'); }); }); ``` 以上代码实现了一个三级联动的效果,根据选择的省份和城市动态改变区县下拉列表的选项内容。在监听选择事件时,根据选择的选项值设置下一个下拉列表的选项,并通过form.render('select')重新渲染下拉列表,使其生效。 注意,在使用Layuiselect多级联动前,需要先引入Layui的相关资源文件,如layui.js和layui.css。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值