layui怎么实现三级联动

1. 前言

在前端开发中,常常需要用到地区、分类等三级联动的功能,而layui是一款非常优秀的前端框架,提供了丰富的组件和插件,其中也包含了三级联动的实现方式。本文将详细介绍layui如何实现三级联动,希望对大家有所帮助。

2. 准备工作

2.1 引入layui

首先,在html文件中引入layui的css和js文件。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>三级联动</title>

<link rel="stylesheet" href="layui/css/layui.css">

</head>

<body>

<!-- 此处是页面内容 -->

<script src="layui/layui.js"></script>

</body>

</html>

2.2 编写html结构

然后,编写html结构,用layui组件实现三级联动需要用到form组件和select组件。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>三级联动</title>

<link rel="stylesheet" href="layui/css/layui.css">

</head>

<body>

<div class="layui-form">

<div class="layui-form-item">

<label class="layui-form-label">省份</label>

<div class="layui-input-block">

<select name="province" lay-filter="province">

<option value="">请选择省份</option>

</select>

</div>

</div>

<div class="layui-form-item">

<label class="layui-form-label">城市</label>

<div class="layui-input-block">

<select name="city" lay-filter="city">

<option value="">请选择城市</option>

</select>

</div>

</div>

<div class="layui-form-item">

<label class="layui-form-label">区县</label>

<div class="layui-input-block">

<select name="district">

<option value="">请选择区县</option>

</select>

</div>

</div>

</div>

<script src="layui/layui.js"></script>

<script src="index.js"></script>

</body>

</html>

注意,这里的每个select组件中都有一个lay-filter属性,用于监听select的变化事件,这是实现三级联动的关键。

3. 实现三级联动

3.1 加载省份数据

在index.js文件中编写代码,首先需要加载省份数据,这里可以使用ajax来异步加载json格式的数据。

layui.use('form', function () {

var form = layui.form;

// 加载省份数据

function loadProvinceData() {

$.ajax({

type: 'GET',

url: 'data/province.json',

dataType: 'json',

success: function (data) {

// 渲染省份下拉框

var html = '<option value="">请选择省份</option>';

for (var i = 0; i < data.length; i++) {

html += '<option value="' + data[i].provinceCode + '">' + data[i].provinceName + '</option>';

}

$('select[name="province"]').html(html);

form.render(); // 更新渲染

},

error: function () {

console.log('加载省份数据失败');

}

});

}

loadProvinceData();

});

这里我们需要在data文件夹下创建province.json文件,并准备好省份数据,例如:

[

{

"provinceCode": "110000",

"provinceName": "北京市"

},

{

"provinceCode": "120000",

"provinceName": "天津市"

},

...

]

3.2 加载城市数据

当用户选择省份时,下面的城市下拉框就需要刷新,从而加载该省份对应的城市数据。

layui.use('form', function () {

var form = layui.form;

// 加载省份数据

function loadProvinceData() {

// 代码略...

}

loadProvinceData();

// 加载城市数据

function loadCityData(provinceCode) {

$.ajax({

type: 'GET',

url: 'data/city.json',

dataType: 'json',

data: {

provinceCode: provinceCode

},

success: function (data) {

// 渲染城市下拉框

var html = '<option value="">请选择城市</option>';

for (var i = 0; i < data.length; i++) {

html += '<option value="' + data[i].cityCode + '">' + data[i].cityName + '</option>';

}

$('select[name="city"]').html(html);

form.render(); // 更新渲染

},

error: function () {

console.log('加载城市数据失败');

}

});

}

// 监听省份下拉框

form.on('select(province)', function (data) {

var provinceCode = data.value;

if (provinceCode) { // 如果选择了省份

loadCityData(provinceCode); // 加载城市数据

} else { // 如果没有选择省份

$('select[name="city"]').html('<option value="">请选择城市</option>'); // 清空城市下拉框

$('select[name="district"]').html('<option value="">请选择区县</option>'); // 清空区县下拉框

form.render(); // 更新渲染

}

});

});

这里我们需要在data文件夹下创建city.json文件,并准备好城市数据,在请求城市数据时带上省份代码,例如:

[

{

"cityCode": "110100",

"cityName": "市辖区",

"provinceCode": "110000"

},

{

"cityCode": "110200",

"cityName": "县",

"provinceCode": "110000"

},

...

]

3.3 加载区县数据

当用户选择城市时,下方的区县下拉框就需要刷新,从而加载该城市对应的区县数据。

layui.use('form', function () {

var form = layui.form;

// 加载省份数据

function loadProvinceData() {

// 代码略...

}

loadProvinceData();

// 加载城市数据

function loadCityData(provinceCode) {

// 代码略...

}

// 加载区县数据

function loadDistrictData(cityCode) {

$.ajax({

type: 'GET',

url: 'data/district.json',

dataType: 'json',

data: {

cityCode: cityCode

},

success: function (data) {

// 渲染区县下拉框

var html = '<option value="">请选择区县</option>';

for (var i = 0; i < data.length; i++) {

html += '<option value="' + data[i].districtCode + '">' + data[i].districtName + '</option>';

}

$('select[name="district"]').html(html);

form.render(); // 更新渲染

},

error: function () {

console.log('加载区县数据失败');

}

});

}

// 监听城市下拉框

form.on('select(city)', function (data) {

var cityCode = data.value;

if (cityCode) { // 如果选择了城市

loadDistrictData(cityCode); // 加载区县数据

} else { // 如果没有选择城市

$('select[name="district"]').html('<option value="">请选择区县</option>'); // 清空区县下拉框

form.render(); // 更新渲染

}

});

});

这里我们需要在data文件夹下创建district.json文件,并准备好区县数据,在请求区县数据时带上城市代码,例如:

[

{

"districtCode": "110101",

"districtName": "东城区",

"cityCode": "110100"

},

{

"districtCode": "110102",

"districtName": "西城区",

"cityCode": "110100"

},

...

]

4. 总结

至此,通过使用layui的form组件和select组件,我们成功实现了省份、城市、区县三级联动的功能。这里我们将省份、城市、区县的数据放在了json文件中,当然也可以放在数据库中,前端通过ajax请求数据即可。