不需要访问后台服务器端,不使用Ajax,无刷新,纯JS实现的省市区三级联动。
当省市区数据变动是只需调正js即可。
使用方法:
<!DOCTYPE html>
<html>
<head>
<title>纯JS省市区联动</title>
<script type="text/javascript" src="jsAddress.js"></script>
</head>
<body>
<div>
省:<select id="cmbProvince"></select>
市:<select id="cmbCity"></select>
区:<select id="cmbArea"></select>
<br /><br />
省:<select id="Select1"></select>
市:<select id="Select2"></select>
区:<select id="Select3"></select>
<script type="text/javascript">
addressInit('cmbProvince', 'cmbCity', 'cmbArea', '陕西', '宝鸡市', '金台区');
addressInit('Select1', 'Select2', 'Select3');
</script>
</div>
</body>
</html>
核心代码如下:
var addressInit = function (_cmbProvince, _cmbCity, _cmbArea, defaultProvince, defaultCity, defaultArea) { var cmbProvince = document.getElementById(_cmbProvince); var cmbCity = document.getElementById(_cmbCity); var cmbArea = document.getElementById(_cmbArea); function cmbSelect(cmb, str) { for ( var i=0; i<cmb.options.length; i++) { if (cmb.options[i].value == str) { cmb.selectedIndex = i; return ; } } } function cmbAddOption(cmb, str, obj) { var option = document.createElement( "OPTION" ); cmb.options.add(option); option.innerHTML = str; option.value = str; option.obj = obj; } function changeCity() { cmbArea.options.length = 0; if (cmbCity.selectedIndex == -1) return ; var item = cmbCity.options[cmbCity.selectedIndex].obj; for ( var i=0; i<item.areaList.length; i++) { cmbAddOption(cmbArea, item.areaList[i], null ); } cmbSelect(cmbArea, defaultArea); } function changeProvince() { cmbCity.options.length = 0; cmbCity.onchange = null ; if (cmbProvince.selectedIndex == -1) return ; var item = cmbProvince.options[cmbProvince.selectedIndex].obj; for ( var i=0; i<item.cityList.length; i++) { cmbAddOption(cmbCity, item.cityList[i].name, item.cityList[i]); } cmbSelect(cmbCity, defaultCity); changeCity(); cmbCity.onchange = changeCity; } for ( var i=0; i<provinceList.length; i++) { cmbAddOption(cmbProvince, provinceList[i].name, provinceList[i]); } cmbSelect(cmbProvince, defaultProvince); changeProvince(); cmbProvince.onchange = changeProvince; } var provinceList = [ {name: '北京' , cityList:[ {name: '市辖区' , areaList:[ '东城区' , '西城区' , '崇文区' , '宣武区' , '朝阳区' , '丰台区' , '石景山区' , '海淀区' , '门头沟区' , '房山区' , '通州区' , '顺义区' , '昌平区' , '大兴区' , '怀柔区' , '平谷区' ]}, {name: '县' , areaList:[ '密云县' , '延庆县' ]} ]}, {name: '上海' , cityList:[ {name: '市辖区' , areaList:[ '黄浦区' , '卢湾区' , '徐汇区' , '长宁区' , '静安区' , '普陀区' , '闸北区' , '虹口区' , '杨浦区' , '闵行区' , '宝山区' , '金山区' , '松江区' , '青浦区' , '南汇区' , '奉贤区' ]}, {name: '县' , areaList:[ '崇明县' ]} ]} ]; |
实例下载:https://files.cnblogs.com/zjfree/jsAddress.rar
2013-07-16 修正火狐兼容性问题。
2013-08-20 从QQ网站中提取的纯JS省市区三级联动 【强烈推荐】
欢迎转载,转载请注明:转载自[ http://www.cnblogs.com/zjfree/ ]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2010-11-30 webSql工具