这个是一个layui省市区三级联动插件,近来使用layui后台模板框架开发后台系统,要用到省市县/区三级联动,本想从网上找个现成的轮子,然没有自己想要的需求,就自己造了个。
本插件实现省市区相应数据通过ajax动态从服务端加载数据,省市区数据结构key-value形式。
html示例:
说明:
这里我们可以通过给province_default、city_default、area_default设值,来实现省市区默认选中项。
如只想显示二级联动,可将以下代码注释.
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 += '';
}else{
proHtml += '';
}
});
//初始化省数据
$("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 += '';
}else{
ciHtml += '';
}
});
//加载市
$("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 += '';
}else{
areaHtml += '';
}
});
//加载县区
$("select[name=area]").append(areaHtml).removeAttr("disabled");
form.render();
});
}
}
form.on('select(province)', function (proData) {
$("select[name=city]").html('');
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 += '';
});
//加载市
$("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('');
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 += '';
});
//加载县区
$("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示例
[['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/...
如有任何问题或建议,欢迎批评指正!