基于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 相关文章推荐
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 Javascript
jquery click([data],fn)使用方法实例介绍
Jul 08 Javascript
js和jquery中循环的退出和继续学习记录
Sep 06 Javascript
JS学习之表格的排序简单实例
May 16 Javascript
js实现html table 行,列锁定的简单实例
Oct 13 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
Dec 16 Javascript
AngularJS 异步解决实现方法
Jun 12 Javascript
详解vue2.6插槽更新v-slot用法总结
Mar 09 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
ES6中定义类和对象的方法示例
Jul 31 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
Dec 04 Javascript
vue开发移动端底部导航条功能
Apr 08 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中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
微信支付的开发流程详解
2016/09/13 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
JavaScript 参考教程
2006/12/29 Javascript
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
python开启debug模式的方法
2019/06/27 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
基于keras中的回调函数用法说明
2020/06/17 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
部队学习十八大感言
2014/01/11 职场文书
运动会四百米广播稿
2014/01/19 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
物业管理专业自荐信
2014/07/01 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
离婚律师函范本
2015/05/27 职场文书
创业计划书详解
2019/07/19 职场文书