layui省市区三级联动

该博客介绍了如何使用layui-v1.0.4版本结合citys.js插件,实现网页上的省市区三级联动功能,提供了详细的操作步骤和源码示例。
摘要由CSDN通过智能技术生成

layui省市区三级联动

(都是亲自过测试)需要下载layui-v1.0.4和
citys.js插件,插件可以自己封装,有提供源码

<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8" />
      <title></title>
      <link rel="stylesheet" type="text/css" href="layui-v1.0.4/layui/css/layui.css"/>
   </head>
   <body>
      <fieldset class="layui-elem-field" style="margin: 20px;">
        <legend>省市联动</legend>
        <div class="layui-field-box">
         <form class="layui-form layui-form-pane" action="javascript:;">
            <div class="layui-form-item">
                <label class="layui-form-label">选择地区</label>
                <div class="layui-input-inline">
                   <select name="P1" lay-filter="province">
                      <option></option>
                   </select>
                </div>
                <div class="layui-input-inline">
                   <select name="C1" lay-filter="city">
                      <option></option>
                   </select>
                </div>
                <div class="layui-input-inline">
                   <select name="A1" lay-filter="area">
                      <option></option>
                   </select>
                </div>
             </div>
         </form>
        </div>
      </fieldset>

      <fieldset class="layui-elem-field" style="margin: 20px;">
        <legend>选择结果</legend>
        <div class="layui-field-box">
         <form class="layui-form" action="javascript:;">
            <div class="layui-form-item">
                <label class="layui-form-label pca-label-province"></label>
                <label class="layui-form-label pca-label-city"></label>
                <label class="layui-form-label pca-label-area"></label>
             </div>
         </form>
        </div>
      </fieldset>

      
      <script src="js/jquery-1.11.0.js" type="text/javascript" charset="utf-8"></script>
      <script src="layui-v1.0.4/layui/lay/dest/layui.all.js" type="text/javascript" charset="utf-8"></script>
      <script src="js/citys.js" type="text/javascript" charset="utf-8"></script>
      <script type="text/javascript">
         pca.init('select[name=P1]', 'select[name=C1]', 'select[name=A1]', '北京', '北京', '朝阳区');
      </script>
   </body>
</html>

citys.js

/**
 * 时间:2018年11月27日
 * 作者:loser
 * 说明:依赖与jQuery和layui, 是基于layui开发的一个省市区联动的小插件, 使用上要基于layui的表单进行使用
 */

(function($){
	var pca = {};
	
	pca.keys = {};
	pca.ckeys = {};
	
	pca.init = function(province, city, area, initprovince, initcity, initarea){//jQuery选择器, 省-市-区
		if(!province || !$(province).length) return; 
		$(province).html('');
		$(province).append('<option selected>全部</option>');
		for(var i in citys){
			$(province).append('<option>'+citys[i].name+'</option>');
			pca.keys[citys[i].name] = citys[i];
		}
		layui.form('select').render();
		if(initprovince) $(province).next().find('[lay-value="'+initprovince+'"]').click();
		if(!city || !$(city).length) return;
		pca.formRender(city);
		layui.form().on('select(province)', function(data){
		  	var cs = pca.keys[data.value];
		  	$(city).html('');
		  	$(city).append('<option>全部</option>');
		  	if(cs){
				cs = cs.city;  		
				for(var i in cs){
					$(city).append('<option>'+cs[i].name+'</option>');
					pca.ckeys[cs[i].name] = cs[i];
				}
				$(city).find('option:eq(1)').attr('selected', true);
		  	}
			layui.form('select').render();
			$(city).next().find('.layui-this').removeClass('layui-this').click();
			pca.formHidden('province', data.value);
			$('.pca-label-province').html(data.value);//此处可以自己修改 显示的位置, 不想显示可以直接去掉
		}); 
		if(initprovince) $(province).next().find('[lay-value="'+initprovince+'"]').click();
		if(initcity) $(city).next().find('[lay-value="'+initcity+'"]').click();
		if(!area || !$(area).length) return;
		pca.formRender(area);
		layui.form().on('select(city)', function(data){
		  	var cs = pca.ckeys[data.value];
		  	$(area).html('');
		  	$(area).append('<option>全部</option>');
		  	if(cs){
		  		cs = cs.area;
				for(var i in cs){
					$(area).append('<option>'+cs[i]+'</option>');
				}
				$(area).find('option:eq(1)').attr('selected', true);
		  	}
			layui.form('select').render();
			$(area).next().find('.layui-this').removeClass('layui-this').click();
			pca.formHidden('city', data.value);
			$('.pca-label-city').html(data.value);	//此处可以自己修改 显示的位置, 不想显示可以直接去掉
		}); 
		layui.form().on('select(area)', function(data){
			pca.formHidden('area', data.value);		
			$('.pca-label-area').html(data.value);	//此处可以自己修改 显示的位置, 不想显示可以直接去掉
		}); 
		if(initprovince) $(province).next().find('[lay-value="'+initprovince+'"]').click();
		if(initcity) $(city).next().find('[lay-value="'+initcity+'"]').click();
		if(initarea) $(area).next().find('[lay-value="'+initarea+'"]').click();
	}
	
	pca.formRender = function(obj){
		$(obj).html('');
		$(obj).append('<option>全部</option>');
		layui.form('select').render();
	}
	
	pca.formHidden = function(obj, val){
		if(!$('#pca-hide-'+obj).length) 
			$('body').append('<input id="pca-hide-'+obj+'" type="hidden" value="'+val+'" />');
		else
			$('#pca-hide-'+obj).val(val);
	}
	
	var citys = 
[
	{"name":"北京","city":[{"name":"北京","area":["东城区","西城区","崇文区","宣武区","朝阳区","丰台区","石景山区","海淀区","门头沟区","房山区","通州区","顺义区","昌平区","大兴区","平谷区","怀柔区","密云县","延庆县"]}]},
	{"name":"天津","city":[{"name":"天津","area":["和平区","河东区","河西区","南开区","河北区","红桥区","塘沽区","汉沽区","大港区","东丽区","西青区","津南区","北辰区","武清区","宝坻区","宁河县","静海县","蓟县"]}]},
	{"name":"河北","city":[{"name":"石家庄","area":["长安区","桥东区","桥西区","新华区","郊区","井陉矿区","井陉县","正定县","栾城县","行唐县","灵寿县","高邑县","深泽县","赞皇县","无极县","平山县","元氏县","赵县","辛集市","藁","晋州市","新乐市","鹿泉市"]},{"name":"唐山","area":["路南区","路北区","古冶区","开平区","新区","丰润县","滦县","滦南县","乐亭县","迁西县","玉田县","唐海县","遵化市","丰南市","迁安市"]},{"name":"秦皇岛","area":["海港区","山海关区","北戴河区","青龙满族自治县","昌黎县","抚宁县","卢龙县"]},{"name":"邯郸","area":["邯山区","丛台区","复兴区","峰峰矿区","邯郸县","临漳县","成安县","大名县","涉县","磁县","肥乡县","永年县","邱县","鸡泽县","广平县","馆陶县","魏县","曲周县","武安市"]},{"name":"邢台","area":["桥东区","桥西区","邢台县","临城县","内丘县","柏乡县","隆尧县","任县","南和县","宁晋县","巨鹿县","新河县","广宗县","平乡县","威县","清河县","临西县","南宫市","沙河市"]},{"name":"保定","area":["新市区","北市区","南市区","满城县","清苑县","涞水县","阜平县","徐水县","定兴县","唐县","高阳县","容城县","涞源县","望都县","安新县","易县","曲阳县","蠡县","顺平县","博野","雄县","涿州市","定州市","安国市","高碑店市"]},{"name":"张家口","area":["桥东区","桥西区","宣化区","下花园区","宣化县","张北县","康保县","沽源县","尚义县","蔚县","阳原县","怀安县","万全县","怀来县","涿鹿县","赤城县","崇礼县"]},{"name":"承德","area":["双桥区","双滦区","鹰手营子矿区","承德县","兴隆县","平泉县","滦平县","隆化县","丰宁满族自治县","宽城满族自治县","围场满族蒙古族自治县"]},{"name":"沧州","area":["新华区","运河区","沧县","青县","东光县","海兴县","盐山县","肃宁县","南皮县","吴桥县","献县","孟村回族自治县","泊头市","任丘市","黄骅市","河间市"]},{"name":"廊坊","area":["安次区","固安县","永清县","香河县","大城县","文安县","大厂回族自治县","霸州市","三河市"]},{"name":"衡水","area":["桃城区","枣强县","武邑县","武强县","饶阳县","安平县","故城县","景县","阜城县","冀州市","深州市"]}]},
	{"name":"山西","city":[{"name":"太原","area":["小店区","迎泽区","杏花岭区","尖草坪区","万柏林区","晋源区","清徐县","阳曲县","娄烦县","古交市"]},{"name":"大同","area":["城区","矿区","南郊区","新荣区","阳高县","天镇县","广灵县","灵丘县","浑源县","左云县","大同县"]},{"name":"阳泉","area":["城区","矿区","郊区","平定县","盂县"]},{"name":"长治","area":["城区","郊区","长治县","襄垣县","屯留县","平顺县","黎城县","壶关县","长子县","武乡县","沁县","沁源县","潞城市"]},{"name":"晋城","area":["城区","沁水县","阳城县","陵川县","泽州县","高平市"]},{"name":"朔州","area":["朔城区","平鲁区","山阴县","应县","右玉县","怀仁县"]},{"name":"忻州","area":["忻府区","原平市","定襄县","五台县","代县","繁峙县","宁武县","静乐县","神池县","五寨县","岢岚县","河曲县","保德县","偏关县"]},{"name":"吕梁","area":["离石区","孝义市","汾阳市","文水县","交城县","兴县","临县","柳林县","石楼县","岚县","方山县","中阳县","交口县"]},{"name":"晋中","area":["榆次市","介休市","榆社县","左权县","和顺县","昔阳县","寿阳县","太谷县","祁县","平遥县","灵石县"]},{"name":"临汾","area":["临汾市","侯马市","霍州市","曲沃县","翼城县","襄汾县","洪洞县","古县","安泽县","浮山县","吉县","乡宁县","蒲县","大宁县","永和县","隰县","汾西县"]},{"name":"运城","area":["运城市","永济市","河津市","芮城县","临猗县","万荣县","新绛县","稷山县","闻喜县","夏县","绛县","平陆县","垣曲县"]}]},
	{"name":"内蒙古","city":[{"name":"呼和浩特","area":["新城区","回民区","玉泉区","郊区","土默特左旗","托克托县","和林格尔县","清水河县","武川县"]},{"name":"包头","area":["东河区","昆都伦区","青山区","石拐矿区","白云矿区","郊区","土默特右旗","固阳县","达尔罕茂明安联合旗"]},{"name":"乌海","area":["海勃湾区","海南区","乌达区"]},{"name":"赤峰","area":["红山区","元宝山区","松山区","阿鲁科尔沁旗","巴林左旗","巴林右旗","林西县","克什克腾旗","翁牛特旗","喀喇沁旗","宁城县","敖汉旗"]},{"name":"呼伦贝尔","area":["海拉尔市","满洲里市","扎兰屯市","牙克石市","根河市","额尔古纳市","阿荣旗","莫力达瓦达斡尔族自治旗","鄂伦春自治旗","鄂温克族自治旗","新巴尔虎右旗","新巴尔虎左旗","陈巴尔虎旗"]},{"name":"兴安盟","area":["乌兰浩特市","阿尔山市","科尔沁右翼前旗","科尔沁右翼中旗","扎赉特旗","突泉县"]},{"name":"通辽","area":["科尔沁区","霍林郭勒市","科尔沁左翼中旗","科尔沁左翼后旗","开鲁县","库伦旗","奈曼旗","扎鲁特旗"]},{"name":"锡林郭勒盟","area":["二连浩特市","锡林浩特市","阿巴嘎旗","苏尼特左旗","苏尼特右旗","东乌珠穆沁旗","西乌珠穆沁旗","太仆寺旗","镶黄旗","正镶白旗","正蓝旗","多伦县"]},{"name":"乌兰察布盟","area":["集宁市","丰镇市","卓资县","化德县","商都县","兴和县","凉城县","察哈尔右翼前旗","察哈尔右翼中旗","察哈尔右翼后旗","四子王旗"]},{"name":"伊克昭盟","area":["东胜市","达拉特旗","准格
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值