在开始实现之前让我们先预览下效果:
上图说明:行政区划选择框分三级,分别为:省、市、区/县,下面的三个文本框分别返回选择的当前json数据。
开始干活!!请按以下步骤操作:
第一步:腾讯地图行政区划json数据下载地址:
https://lbs.qq.com/service/webService/webServiceGuide/webServiceDistrict#6
下载好后保存为json文件 ,命名:city.data.json
第二步:设置html代码参数
<form class="layui-form syui-p20" action=""> <div class="layui-form-item"> <label class="layui-form-label">行政区划</label> <div class="layui-input-inline"> <select name="province" id="province" lay-filter="selection"> <option value="">请选择省</option> </select> </div> <div class="layui-input-inline"> <select name="city" id="city" lay-filter="selection"> <option value="">请选择市</option> </select> </div> <div class="layui-input-inline"> <select name="county" id="county" lay-filter="selection"> <option value="">请选择区/县</option> </select> </div> </div> <input type="text" id="province_obj" value="" class="syui-w100" /> <input type="text" id="city_obj" value="" class="syui-w100" /> <input type="text" id="county_obj" value="" class="syui-w100" /> </form>
第三步:新建js文件 ,命令:city.selection.js,然后写入以下代码:
layui.use(['form','jquery'], function(){ var form = layui.form, $ = layui.jquery; var province=city=county={}, getProvice, getCity, getCounty; var province_val=city_obj.province||'', city_val=city_obj.city||'', county_val=city_obj.county||''; $.get('/static/js/city.data.json',function(data){ province=data.result[0]; city=data.result[1]; county=data.result[2]; getProvice=function(id){ let res={}; $.each(province, function(i, val){ if(val.id==id){res=val;return false;} }); return res; } getCity=function(id){ let res={}; $.each(city, function(i, val){ if(val.id==id){res=val;return false;} }); return res; } getCounty=function(id){ let res={}; $.each(county, function(i, val){ if(val.id==id){res=val;return false;} }); return res; } $.each(province, function(i, val){ $('#province').append('<option value="'+val.id+'">'+val.name+'</option>'); }); $('#province').find("option[value='"+province_val+"']").attr("selected",true); if(province_val!=''){ let obj_province=getProvice(province_val); $.each(city.slice(obj_province.cidx[0],obj_province.cidx[1]+1),function(i,val){ $('#city').append('<option value="'+val.id+'">'+val.name+'</option>'); }) $('#city').find("option[value='"+city_val+"']").attr("selected",true); } if(city_val!=''){ let obj_city=getCity(city_val); $.each(county.slice(obj_city.cidx[0],obj_city.cidx[1]+1),function(i,val){ name=val.name||val.fullname; $('#county').append('<option value="'+val.id+'">'+name+'</option>'); }) $('#county').find("option[value='"+county_val+"']").attr("selected",true); } form.render('select'); form.on('select(selection)', function (obj) { let selid=$(obj.elem).attr('id'); if(selid=='province'){ $('#city').html('<option value="">请选择城市</option>'); $('#county').html('<option value="">请选择区/县</option>'); if(obj.value!=''){ let obj_province=getProvice(obj.value); $.each(city.slice(obj_province.cidx[0],obj_province.cidx[1]+1),function(i,val){ $('#city').append('<option value="'+val.id+'">'+val.name+'</option>'); }) $('#province_obj').val(JSON.stringify(obj_province)); }else{ $('#province_obj').val(''); } $('#city_obj,#county_obj').val(''); }else if(selid=='city'){ $('#county').html('<option value="">请选择区/县</option>'); if(obj.value!=''){ let obj_city=getCity(obj.value); $('#city_obj').val(JSON.stringify(obj_city)); $('#county_obj').val(''); if(obj_city.hasOwnProperty("cidx")){ $.each(county.slice(obj_city.cidx[0],obj_city.cidx[1]+1),function(i,val){ name=val.name||val.fullname; $('#county').append('<option value="'+val.id+'">'+name+'</option>'); }) } }else{ $('#city_obj,#county_obj').val(''); } }else if(selid=='county'){ if(obj.value!=''){ let obj_county=getCounty(obj.value); $('#county_obj').val(JSON.stringify(obj_county)); }else{ $('#county_obj').val(''); } } form.render('select'); }) }) });
第四步:使用方法
<script src="layui/layui.js" type="text/javascript"></script>
<script>
var city_obj={'province':'','city':'','county':''}; //设置行政区划默认值,可选或留空。
</script>
<script src="city.selection.js?v=1.0" type="text/javascript"></script>
注意:以上引入js文件顺序要对。
上一篇:jquery+BenzAMRRecorder实现微信语音amr格式播放,支持多个语音播放
讨论数量:0