layui省市区三级联动插件
时间:2022-07-25
本文章向大家介绍layui省市区三级联动插件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这个是一个layui省市区三级联动插件,近来使用layui后台模板框架开发后台系统,要用到省市县/区三级联动,本想从网上找个现成的轮子,然没有自己想要的需求,就自己造了个。
本插件实现省市区相应数据通过ajax动态从服务端加载数据,省市区数据结构key-value形式。
html示例:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="format-detection" content="telephone=no">
<link rel="stylesheet" href="./layui/css/layui.css" />
</head>
<body>
<div class="layui-form">
<div class="layui-input-inline">
<select name="province" lay-filter="province" class="province" province_default="110000">
<option value="">请选择省</option>
</select>
</div>
<div class="layui-input-inline">
<select name="city" lay-filter="city" city_default="110000" disabled>
<option value="">请选择市</option>
</select>
</div>
<div class="layui-input-inline">
<select name="area" lay-filter="area" area_default="" disabled>
<option value="">请选择县/区</option>
</select>
</div>
</div>
</body>
<script type="text/javascript" src="./layui/layui.js"></script>
<script type="text/javascript">
layui.config({
base : "./layuiarea/" //layuiarea.js的路径
}).use([ 'layer', 'jquery', "layuiarea" ], function() {
var layer = layui.layer, $ = layui.jquery, layuiarea = layui.layuiarea();
});
</script>
<html>
说明:
这里我们可以通过给province_default、city_default、area_default设值,来实现省市区默认选中项。
如只想显示二级联动,可将以下代码注释.
<div class="layui-input-inline">
<select name="area" lay-filter="area" area_default="" disabled>
<option value="">请选择县/区</option>
</select>
</div>
js示例
layui.define(["form","jquery"],function(exports){
var form = layui.form,
$ = layui.jquery,
Layuiarea = function(){};
Layuiarea.prototype.provinces = function() {
//加载省数据
var proHtml = '',that = this,url="https://demo.duiniya.com/test2/area.php";
$.get(url+"?type=0&id=0", function (data) {
var dataObj = eval(data);
var province_default = $("select[name=province]").attr("province_default");
var city_default = $("select[name=city]").attr("city_default");
var area_default = $("select[name=area]").attr("area_default");
$.each(dataObj,function(idx,item){
if(province_default ==item.code){
proHtml += '<option value="' + item.code + '" selected="">' + item.name + '</option>';
}else{
proHtml += '<option value="' + item.code + '">' + item.name + '</option>';
}
});
//初始化省数据
$("select[name=province]").append(proHtml);
form.render();//更新 所在容器内的全部表单状态
//处理市默认值
if(province_default!="" && city_default!="" ){
$.get(url+"?type=1&id="+province_default, function (data) {
var ciHtml='';
var dataObj = eval(data);
$.each(dataObj,function(idx,item){
if(city_default ==item.code){
ciHtml += '<option value="' + item.code + '" selected="">' + item.name + '</option>';
}else{
ciHtml += '<option value="' + item.code + '">' + item.name + '</option>';
}
});
//加载市
$("select[name=city]").append(ciHtml).removeAttr("disabled");
form.render();
});
if(area_default!=""){
//默认县/区
$.get(url+"?type=2&id="+city_default, function (data) {
var areaHtml='';
var dataObj = eval(data);
$.each(dataObj,function(idx,item){
if(area_default ==item.code){
areaHtml += '<option value="' + item.code + '" selected="">' + item.name + '</option>';
}else{
areaHtml += '<option value="' + item.code + '">' + item.name + '</option>';
}
});
//加载县区
$("select[name=area]").append(areaHtml).removeAttr("disabled");
form.render();
});
}
}
form.on('select(province)', function (proData) {
$("select[name=city]").html('<option value="">请选择市</option>');
var value = proData.value;
if (value > 0) {
$.get(url+"?type=1&id="+value, function (data) {
var ciHtml='';
var dataObj = eval(data);
$.each(dataObj,function(idx,item){
ciHtml += '<option value="' + item.code + '">' + item.name + '</option>';
});
//加载市
$("select[name=city]").append(ciHtml).removeAttr("disabled");
form.render();
});
} else {
$("select[name=city]").attr("disabled", "disabled");
}
});
form.on('select(city)', function (cityData) {
$("select[name=area]").html('<option value="">请选择县/区</option>');
var value = cityData.value;
if (value > 0) {
$.get(url+"?type=2&id="+value, function (data) {
var areaHtml='';
var dataObj = eval(data);
$.each(dataObj,function(idx,item){
areaHtml += '<option value="' + item.code + '">' + item.name + '</option>';
});
//加载县区
$("select[name=area]").append(areaHtml).removeAttr("disabled");
form.render();
});
} else {
$("select[name=area]").attr("disabled", "disabled");
}
});
})
}
var layuiarea = new Layuiarea();
exports("layuiarea",function(){
layuiarea.provinces();
});
})
php示例
<?php
$id = $_GET['id'] ?? 0;
$type = $_GET['type'] ?? 0;//
if(!$type && !$type){
$data = [0 => [['code' => 110000, 'name' => '北京'],
//其他省...
['code' => 130000, 'name' => "河北"],],
];
}elseif($type==1){
//市
$data = [ 110000 => [['code' => 110000, 'name' => "北京"]],
130000 => [['code' => 130100, 'name' => '石家庄'], ['code' => 130400, 'name' => "邯郸"]],
];
}else{
//区
$data = [
130100=>[['code' => 130102, 'name' => '长安区'],],
110000=>[['code' => 110101, 'name' => '东城区'],],
130400=>[['code' => 130402, 'name' => '邯山区'],],
];
}
echo json_encode($data[$id], JSON_UNESCAPED_UNICODE);
预览地址:https://demo.duiniya.com/test...
项目地址:https://github.com/guyan0319/...
如有任何问题或建议,欢迎批评指正!
- 一条sql语句的改进探索(r5笔记第70天)
- 【专业技术】Node.js 究竟是什么?
- Github 项目推荐 | 用 Pytorch 实现的 WaveNet-Vocoder
- 重启数据库的一场闹剧(r5笔记第68天)
- 【C语言系列】基础语法案例分析(初级篇)
- 一次ORA-00600问题的排查和分析(r5笔记第64、65天)
- SpringMVC入门就这么简单
- pl/sql中的forall简单测试(r5笔记第63天)
- SpringMVC【开发Controller】详解
- 巧用外部表备份历史数据(r5笔记第62天)
- Github 项目推荐 | 最小化类 AlphaGo Zero 引擎 —— Nochi
- 半自动化运维之快速连接到指定环境(一) (r5笔记第61天)
- Spring【DAO模块】知识要点
- 浅谈exp/imp(上) (r5笔记第81天)
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例