基于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 相关文章推荐
js同时按下两个方向键
Dec 01 Javascript
图片img的src不变让浏览器重新加载实现方法
Mar 29 Javascript
jQuery分别获取选中的复选框值的示例
Jun 17 Javascript
JavaScript日期类型的一些用法介绍
Mar 02 Javascript
百度地图API之本地搜索与范围搜索
Jul 30 Javascript
原生JS和jQuery操作DOM对比总结
Jan 19 Javascript
手把手搭建安装基于windows的Vue.js运行环境
Jun 12 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
Sep 27 Javascript
JS模拟实现哈希表及应用详解
May 04 Javascript
JavaScript中callee和caller的区别与用法实例分析
Jun 28 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
Nov 07 Javascript
element跨分页操作选择详解
Jun 29 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获取远程文件的内容和大小
2015/11/03 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
php封装的smarty类完整实例
2016/10/19 PHP
浅谈PHP的反射API
2017/02/26 PHP
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
基于Pandas读取csv文件Error的总结
2018/06/15 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
银行类自荐信
2014/02/04 职场文书
经典英文广告词
2014/03/18 职场文书
垃圾桶标语
2014/06/24 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android