基于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 相关文章推荐
理解 JavaScript 预解析
Oct 25 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
Mar 19 Javascript
js 窗口抖动示例
Sep 04 Javascript
jQuery移除元素自动解绑事件实现思路及代码
May 31 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
Jul 28 Javascript
在js中做数字字符串补0(js补零)
Mar 25 Javascript
vue中遇到的坑之变化检测问题(数组相关)
Oct 13 Javascript
Js面试算法详解
Apr 08 Javascript
用node开发并发布一个cli工具的方法步骤
Jan 03 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
Oct 24 Javascript
vue表单数据交互提交演示教程
Nov 13 Javascript
JavaScript嵌入百度地图API的最详细方法
Apr 16 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
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
php中filter_input函数用法分析
2014/11/15 PHP
php简单日历函数
2015/10/28 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
window.ActiveXObject使用说明
2010/11/08 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
Python3爬虫学习入门教程
2018/12/11 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
美国糖果店:Sugarfina
2019/02/21 全球购物
2014年药房工作总结
2014/11/22 职场文书
2015年教师节慰问信
2015/03/23 职场文书
入伍通知书
2015/04/23 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
道歉信范文
2015/05/12 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
用JS创建一个录屏功能
2021/11/11 Javascript
Python集合set()使用的方法详解
2022/03/18 Python