Layui框架实现地址 级联选择器并回显

在 layui 框架中,使用 form 模块的select选择器来实现地址级联功能。地址级联选择器可以方便地选择省、市、区/县等地址信息。

效果图

 layui框架里没有现成的级联选择器 我们用select下拉框实现 一般后端会给你第一个下拉框的数据列表 然后根据你选择的第一个选项的id当做参数去获取第二个选项的列表选项 第三个也同理

上代码:

<div class="layui-form-item " style="width:calc(100% - 55px)">
	<label class="layui-form-label">活动地址:</label>
	<div class="layui-input-block" id="addressSelect"
		style="display: flex;justify-content: space-between;">
		<select class="project-select" style="width: 150px;" id="selectOne" name="selectOne"
			lay-filter="selectOne">
			<option value="">请选择</option>
		</select>
		<select class="project-select" style="width: 150px;" id="selectTwo" name="selectTwo"
			lay-filter="selectTwo">
			<option value="">请选择</option>
		</select>
		<select class="project-select" style="width: 150px;" id="selectThere" name="selectThere"
			lay-filter="selectThere">
			<option value="">请选择</option>
		</select>
	</div>
</div>

这里用selectOne  selectTwo  selectThere来代表省 市 区三种类型

1.先获取到第一个下拉框列表数据并渲染到下拉框中 (开局调用)

// 获取所有父级地址
function getFatherAdd() {
    $.ajax({
        type: "get",
        url: getFatherAddress,
        async: false,
        headers: {
            'dm-authorize-token': $.cookie("token"),
        },
        success: function (res) {
            // console.log(res);
            for (var i = 0; i < res.data.length; i++) {
                $("#selectOne").append('<option value="' + res.data[i].id + '" label="' + res.data[i].name + '">' + res.data[i].name + '</option>');
            }
        },
        error: function (e) {
            layer.msg(e.msg);
        }
    });
}

2.然后就监听第一个下拉框的操作 选项发生改变时获取第二级下拉框数据列表

 layui.use('form', function () { 
         form = layui.form;
        // 监听 第一级的select 事件
        form.on('select(selectOne)', function (data) {
            var fatherID = data.value; // 获取选中的值
            var text = data.elem[data.elem.selectedIndex].text; // 获取选中的文本
            if (fatherID !== '' && fatherID) {
                $.ajax({
                    type: "get",
                    url: getSonAddress,
                    async: false,
                    headers: {
                        'dm-authorize-token': $.cookie("token"),
                    },
                    data: {
                        pid: fatherID,
                    },
                    success: function (res) {
                        // console.log(res);
//渲染第二级下拉框
                        for (var i = 0; i < res.data.length; i++) {
                            $("#selectTwo").append('<option value="' + res.data[i].id + '" label="' + res.data[i].name + '">' + res.data[i].name + '</option>');
                        }
                        form.render('select');
                    },
                    error: function (e) {
                        layer.msg(e.msg);
                    }
                });
            }
        });
 // 监听 第二级的select 事件
        form.on('select(selectTwo)', function (data) {
            var fatherID = data.value; // 获取选中的值
            var text = data.elem[data.elem.selectedIndex].text; // 获取选中的文本
            if (fatherID !== '' && fatherID) {
                $.ajax({
                    type: "get",
                    url: getSonAddress,
                    async: false,
                    headers: {
                        'dm-authorize-token': $.cookie("token"),
                    },
                    data: {
                        pid: fatherID,
                    },
                    success: function (res) {
                        // 获取后面子项下拉框的选择器
                        var $selectThere = $('#selectThere');
                        // 清空后面子项下拉框的选项 这样你选择第三级下拉框数据也会跟着变化这里我一级下拉框因为就一个数据 所以第一级没有设置这个功能 看需求
                        $selectThere.empty();
//渲染第三级下拉框
                        for (var i = 0; i < res.data.length; i++) {
                            $("#selectThere").append('<option value="' + res.data[i].id + '" label="' + res.data[i].name + '">' + res.data[i].name + '</option>');
                        }
                        form.render('select');
                    },
                    error: function (e) {
                        layer.msg(e.msg);
                    }
                });
            }
        });


})

提交表单就正常$("#id名").val() 获取值就行了 

效果:

最后回显功能 写在你要回显的地方啊!!

1.data.addressCity 省id

2.data.addressArea 市id

                // 回显第一级下拉框
                $("#selectOne").val(data.addressCity);
                form.render('select');

                // 回显第二级下拉框
                $("#selectTwo").empty();
                $.ajax({
                    type: "get",
                    url: getSonAddress,
                    async: false,
                    headers: {
                        'dm-authorize-token': $.cookie("token"),
                    },
                    data: {
                        pid: data.addressCity,
                    },
                    success: function (res) {
                        for (var i = 0; i < res.data.length; i++) {
                            $("#selectTwo").append('<option value="' + res.data[i].id + '" label="' + res.data[i].name + '">' + res.data[i].name + '</option>');
                        }
                        $("#selectTwo").val(data.addressArea);
                        form.render('select');
                    },
                    error: function (e) {
                        layer.msg(e.msg);
                    }
                });

                // 回显第三级下拉框
                $("#selectThere").empty();
                $.ajax({
                    type: "get",
                    url: getSonAddress,
                    async: false,
                    headers: {
                        'dm-authorize-token': $.cookie("token"),
                    },
                    data: {
                        pid: data.addressArea,
                    },
                    success: function (res) {
                        for (var i = 0; i < res.data.length; i++) {
                            $("#selectThere").append('<option value="' + res.data[i].id + '" label="' + res.data[i].name + '">' + res.data[i].name + '</option>');
                        }
                        $("#selectThere").val(data.addressStreet);
                        form.render('select');
                    },
                    error: function (e) {
                        layer.msg(e.msg);
                    }
                });

 拿回显数据的省id 获取市列表数据(获取是为了你要修改数据) 拿到回显数据的市id 获取到第三级的数据

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Layui是一款轻量级的前端UI框架,它提供了丰富的组件和工具,方便开发者快速构建美观、易用的Web界面。Layui中的级联选择器可以实现多个选择框之间的联动选择,满足你的需求。 下面是一个使用Layui级联选择器实现省市县三级联动的示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>省市县三级联动</title> <link rel="stylesheet" href="https://cdn.staticfile.org/layui/2.5.6/css/layui.css"> </head> <body> <div class="layui-form"> <div class="layui-form-item"> <div class="layui-inline"> <label class="layui-form-label">省份</label> <div class="layui-input-inline"> <select id="province" lay-filter="province"> <option value="">请选择省份</option> <!-- 这里可以通过后台接口获取省份数据并动态生成选项 --> <option value="广东省">广东省</option> <option value="浙江省">浙江省</option> <!-- 其他省份选项 --> </select> </div> </div> <div class="layui-inline"> <label class="layui-form-label">城市</label> <div class="layui-input-inline"> <select id="city" lay-filter="city"> <option value="">请选择城市</option> <!-- 这里可以通过后台接口获取城市数据并动态生成选项 --> </select> </div> </div> <div class="layui-inline"> <label class="layui-form-label">区县</label> <div class="layui-input-inline"> <select id="district"> <option value="">请选择区县</option> <!-- 这里可以通过后台接口获取区县数据并动态生成选项 --> </select> </div> </div> </div> </div> <script src="https://cdn.staticfile.org/layui/2.5.6/layui.js"></script> <script> layui.use(['form'], function(){ var form = layui.form; // 监听省份选择 form.on('select(province)', function(data){ var province = data.value; // 根据选择的省份获取对应的城市数据并动态生成选项 // 这里可以通过后台接口获取城市数据 var cityOptions = '<option value="">请选择城市</option>'; if (province === '广东省') { cityOptions += '<option value="广州市">广州市</option>'; cityOptions += '<option value="深圳市">深圳市</option>'; // 其他城市选项 } else if (province === '浙江省') { cityOptions += '<option value="杭州市">杭州市</option>'; cityOptions += '<option value="宁波市">宁波市</option>'; // 其他城市选项 } $('#city').html(cityOptions); form.render('select'); }); // 监听城市选择 form.on('select(city)', function(data){ var city = data.value; // 根据选择的城市获取对应的区县数据并动态生成选项 // 这里可以通过后台接口获取区县数据 var districtOptions = '<option value="">请选择区县</option>'; if (city === '广州市') { districtOptions += '<option value="天河区">天河区</option>'; districtOptions += '<option value="越秀区">越秀区</option>'; // 其他区县选项 } else if (city === '深圳市') { districtOptions += '<option value="福田区">福田区</option>'; districtOptions += '<option value="南山区">南山区</option>'; // 其他区县选项 } else if (city === '杭州市') { districtOptions += '<option value="西湖区">西湖区</option>'; districtOptions += '<option value="拱墅区">拱墅区</option>'; // 其他区县选项 } else if (city === '宁波市') { districtOptions += '<option value="海曙区">海曙区</option>'; districtOptions += '<option value="江东区">江东区</option>'; // 其他区县选项 } $('#district').html(districtOptions); form.render('select'); }); }); </script> </body> </html> ``` 你可以根据实际需求,通过后台接口获取省份、城市和区县的数据,并动态生成选项。当选择省份时,根据选择的省份获取对应的城市数据并动态生成选项;当选择城市时,根据选择的城市获取对应的区县数据并动态生成选项。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值