基于JS实现省市联动效果代码分享


Posted in Javascript onJune 06, 2016

在日常项目开发阶段经常见到下拉框二级联动效果,尤其是涉及地区、品种等有多级选项时。比如说:常见的省市联动下拉框,在选择省份时,城市列表也会更随改变。

基于JS实现省市联动效果代码分享

思路:

1,所谓联动效果,是指出发父级的数据变化时,会影响到关联性子级数据元素的变化。

下面是造的省市的数据:

var linkDatas = {
provinces:[
{
"code":"0",
"name":"请选择"
},
{
"code":"1",
"name":"北京"
},
{
"code":"2",
"name":"天津"
},
{
"code":"3",
"name":"河北"
},
{
"code":"4",
"name":"湖北"
},
{
"code":"5",
"name":"广东"
},
{
"code":"6",
"name":"其他"
}
],
citys:{
0:[
"请选择"
],
1:[
"朝阳区",
"海淀区",
"东城区",
"西城区",
"房山区",
"其他"
],
2:[
"天津"
],
3:[
"沧州",
"石家庄",
"秦皇岛",
"其他"
],
4:[
"武汉市",
"宜昌市",
"襄樊市",
"其他"
],
5:[
"广州市",
"深圳市",
"汕头市",
"佛山市",
"珠海市",
"其他"
],
6:[
"其他"
]
}
};

2,根据数据动态生成option节点:

function addOptions(target,options){
var optionEle = null,
target = target,
option = options,
optionLen = options.length;
for(var i = 0;i < optionLen;i++){
optionEle = document.createElement('option');
optionEle.value = option[i].value;
optionEle.text = option[i].text;
target.options.add(optionEle);
}
}

3,根据上述省市数据,其中code代表“省级”指向“城市”的标识符,当省级的数据变更时,出发change事件:

pro.onchange = function(){
console.log(this);
var ct = city[this.value],
ctLen = ct.length,
ctBox = [];
c.innerHTML = ""; 
/*添加城市*/ 
for(var j = 0;j < ctLen;j++){
ctBox.push({
"text" : ct[j],
"value": ct[j]
});
}
addOptions(c,ctBox);
}

HTML代码:

<div class="content">
<h3>下拉框联动效果</h3>
<p>省份:
<select name="provinces" id="provinces">
</select>
</p>
<p>
市:
<select name="citys" id="citys">
</select>
</p>
</div>

全部JavaScript代码:

var linkDatas = {
provinces:[
{
"code":"0",
"name":"请选择"
},
{
"code":"1",
"name":"北京"
},
{
"code":"2",
"name":"天津"
},
{
"code":"3",
"name":"河北"
},
{
"code":"4",
"name":"湖北"
},
{
"code":"5",
"name":"广东"
},
{
"code":"6",
"name":"其他"
}
],
citys:{
0:[
"请选择"
],
1:[
"朝阳区",
"海淀区",
"东城区",
"西城区",
"房山区",
"其他"
],
2:[
"天津"
],
3:[
"沧州",
"石家庄",
"秦皇岛",
"其他"
],
4:[
"武汉市",
"宜昌市",
"襄樊市",
"其他"
],
5:[
"广州市",
"深圳市",
"汕头市",
"佛山市",
"珠海市",
"其他"
],
6:[
"其他"
]
}
};
function addOptions(target,options){
var optionEle = null,
target = target,
option = options,
optionLen = options.length;
for(var i = 0;i < optionLen;i++){
optionEle = document.createElement('option');
optionEle.value = option[i].value;
optionEle.text = option[i].text;
target.options.add(optionEle);
}
}
function provincesCitysLink(pro,c){
var LD = linkDatas,
provinces = LD.provinces,
city = LD.citys,
initCity = city[0],
proBox = [];
/*添加省份*/
for(var i = 0;i < provinces.length;i++){
proBox.push({
"text" : provinces[i].name,
"value": provinces[i].code
})
} 
addOptions(pro,proBox);
/*初始化城市*/
addOptions(c,[{
"text" : initCity,
"value": initCity
}]);
/*添加联动事件*/
pro.onchange = function(){
console.log(this);
var ct = city[this.value],
ctLen = ct.length,
ctBox = [];
c.innerHTML = ""; 
/*添加城市*/ 
for(var j = 0;j < ctLen;j++){
ctBox.push({
"text" : ct[j],
"value": ct[j]
});
}
addOptions(c,ctBox);
}
}
var provinces = document.getElementById('provinces'),
citys = document.getElementById('citys');
provincesCitysLink(provinces,citys);
Javascript 相关文章推荐
摘自百度的图片轮换效果代码
Nov 19 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
Oct 22 Javascript
jQuery学习3:操作元素属性和特性
Feb 07 Javascript
JavaScript中也使用$美元符号来代替document.getElementById
Jun 19 Javascript
Jquery 获取checkbox的checked问题
Nov 16 Javascript
关于javascript模块加载技术的一些思考
Nov 28 Javascript
JavaScript中的类与实例实现方法
Jan 23 Javascript
js实现全国省份城市级联下拉菜单效果代码
Sep 07 Javascript
Web技术实现移动监测的介绍
Sep 18 Javascript
js技巧之十几行的代码实现vue.watch代码
Jun 09 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
Jul 19 Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 Javascript
对象转换为原始值的实现方法
Jun 06 #Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
Jun 06 #Javascript
node-http-proxy修改响应结果实例代码
Jun 06 #Javascript
浅谈bootstrap源码分析之tab(选项卡)
Jun 06 #Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
Jun 06 #Javascript
jquery插件方式实现table查询功能的简单实例
Jun 06 #Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
Jun 06 #Javascript
You might like
用PHP制作静态网站的模板框架(二)
2006/10/09 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
简单的三步vuex入门
2018/05/20 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
Django开发中的日志输出的方法
2018/07/02 Python
python样条插值的实现代码
2018/12/17 Python
Python3 翻转二叉树的实现
2019/09/30 Python
python3 简单实现组合设计模式
2020/07/02 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
债务纠纷委托书
2014/08/30 职场文书
毕业论文致谢词
2015/05/14 职场文书
爱国影片观后感
2015/06/18 职场文书
重阳节活动主持词
2015/07/04 职场文书
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS
Python使用MapReduce进行简单的销售统计
2022/04/22 Python