原生JavaScript实现动态省市县三级联动下拉框菜单实例代码


Posted in Javascript onFebruary 03, 2016

像平时购物选择地址时一样,通过选择的省动态加载城市列表,通过选择的城市动态加载县区列表,从而可以实现省市县的三级联动,下面使用原生的JavaScript来实现这个功能:

先给大家展示下测试结果:

未做任何选择时:

原生JavaScript实现动态省市县三级联动下拉框菜单实例代码

选择时:

原生JavaScript实现动态省市县三级联动下拉框菜单实例代码

代码如下所示:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>三级联动测试</title>
<script src="jquery-2.1.4.min.js"></script>
<script type="text/javascript">
//用来获得option元素中selected属性为true的元素的id
function Get_Selected_Id(place){
var pro = document.getElementById(place);
var Selected_Id = pro.options[pro.selectedIndex].id;
return Selected_Id; //返回selected属性为true的元素的id
}
//改变下一个级联的option元素的内容,即加载市或县
function Get_Next_Place(This_Place_ID,Action){
var Selected_Id = Get_Selected_Id(This_Place_ID); //Selected_Id用来记录当前被选中的省或市的ID
if(Action=='Get_city') //从而可以在下一个级联中加载相应的市或县
Add_city(Selected_Id);
else if(Action=='Get_country')
Add_country(Selected_Id);
}
//用来存储省市区的数据结构
var Place_dict = {
"GuangDong":{
"GuangZhou":["PanYu","HuangPu","TianHe"],
"QingYuan":["QingCheng","YingDe","LianShan"],
"FoShan":["NanHai","ShunDe","SanShui"]
},
"ShanDong":{
"JiNan":["LiXia","ShiZhong","TianQiao"],
"QingDao":["ShiNan","HuangDao","JiaoZhou"]
},
"HuNan":{
"ChangSha":["KaiFu","YuHua","WangCheng"],
"ChenZhou":["BeiHu","SuXian","YongXian"]
}
};
//加载城市选项
function Add_city(Province_Selected_Id){
$("#city").empty();
$("#city").append("<option>City</option>");
$("#country").empty();
$("#country").append("<option>Country</option>");
//上面的两次清空与两次添加是为了保持级联的一致性
var province_dict = Place_dict[Province_Selected_Id]; //获得一个省的字典
for(city in province_dict){ //取得省的字典中的城市
//添加内容的同时在option标签中添加对应的城市ID
var text = "<option"+" id='"+city+"'>"+city+"</option>";
$("#city").append(text);
console.log(text); //用来观察生成的text数据
}
}
//加载县区选项
function Add_country(City_Selected_Id){
$("#country").empty();
$("#country").append("<option>Country</option>");
//上面的清空与添加是为了保持级联的一致性
var Province_Selected_ID = Get_Selected_Id("province"); //获得被选中省的ID,从而方便在字典中加载数据
var country_list = Place_dict[Province_Selected_ID][City_Selected_Id]; //获得城市列表
for(index in country_list){
////添加内容的同时在option标签中添加对应的县区ID
var text = "<option"+" id=\'"+country_list[index]+"\'>"+country_list[index]+"</option>";
$("#country").append(text);
console.log(text); //用来观察生成的text数据
}
}
</script>
</head>
<body>
<p>您的收货地址:</p>
<select id="province" onchange="Get_Next_Place('province','Get_city')">
<option id="Not_data1">Province</option>
<option id="GuangDong" value="GuangDong">GuangDong</option>
<option id="ShanDong" value="ShanDong">ShanDong</option>
<option id="HuNan" value="HuNan">HuNan</option>
</select>
<select id="city" onchange="Get_Next_Place('city','Get_country')">
<option id="Not_data2">City</option>
</select>
<select id="country">
<option id="Not_data3">Country</option>
</select>
<br/>
</body>
</html>

当然,省市县三者都是动态联动的,只要顶级的内容发生改变,所有子级的内容也会发生改变或被重置为City或Country.

以上所述是小编给大家分享的原生JavaScript实现动态省市县三级联动下拉框菜单实例代码,希望对大家有所帮助。

Javascript 相关文章推荐
js中for in的用法示例解析
Dec 25 Javascript
基于JavaScript实现生成名片、链接等二维码
Sep 20 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
Angularjs 与 bower安装和使用详解
May 11 Javascript
基于datepicker定义自己的angular时间组件的示例
Mar 14 Javascript
Vue兼容ie9的问题全面解决方案
Jun 19 Javascript
解决vue 打包发布去#和页面空白的问题
Sep 04 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
Sep 30 Javascript
js中forEach,for in,for of循环的用法示例小结
Mar 14 Javascript
Antd表格滚动 宽度自适应 不换行的实例
Oct 27 Javascript
Javascript中的奇葩知识,你知道吗?
Jan 25 Javascript
vue实现移动端div拖动效果
Mar 03 Vue.js
AngularJS向后端ASP.NET API控制器上传文件
Feb 03 #Javascript
javascript DIV实现跟随鼠标移动
Mar 19 #Javascript
javascript鼠标右键菜单自定义效果
Dec 08 #Javascript
JavaScript获取当前运行脚本文件所在目录的方法
Feb 03 #Javascript
JavaScript获取对象在页面中位置坐标的方法
Feb 03 #Javascript
基于jQuery实现select下拉选择可输入附源码下载
Feb 03 #Javascript
javascript点击按钮实现隐藏显示切换效果
Feb 03 #Javascript
You might like
php购物车实现代码
2011/10/10 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
PHP框架性能测试报告
2016/05/08 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
Vuex简单入门
2017/04/19 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
Swiper自定义分页器使用详解
2017/12/28 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
在Python中使用列表生成式的教程
2015/04/27 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
python实现彩色图转换成灰度图
2019/01/15 Python
详解python中的数据类型和控制流
2019/08/08 Python
Python imread、newaxis用法详解
2019/11/04 Python
python常用数据重复项处理方法
2019/11/22 Python
python异常处理和日志处理方式
2019/12/24 Python
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
财政局个人总结
2015/03/04 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
高质量“欢迎词”
2019/04/03 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
python 对图片进行简单的处理
2021/06/23 Python
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL