基于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 相关文章推荐
json跟xml的对比分析
Jun 10 Javascript
jQuery :nth-child前有无空格的区别分析
Jul 11 Javascript
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
May 28 Javascript
javascript生成大小写字母
Jul 03 Javascript
Treegrid的动态加载实例代码
Apr 29 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
Dec 08 Javascript
AngularJS实现表单验证功能详解
Oct 12 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
Oct 26 Javascript
Angular PWA使用的Demo示例
Jan 31 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
Oct 12 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
Nov 09 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也可以?成Shell Script
2006/10/09 PHP
使用PHP模拟HTTP认证
2006/10/09 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
javaScript语法总结
2016/11/25 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
Python 连连看连接算法
2008/11/22 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
python清除函数占用的内存方法
2018/06/25 Python
Python语言进阶知识点总结
2019/05/28 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
宝塔面板成功部署Django项目流程(图文)
2020/06/22 Python
Python之字典对象的几种创建方法
2020/09/30 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
adidas美国官网:adidas US
2016/09/21 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
电气自动化自荐信
2013/10/10 职场文书
市级文明单位申报材料
2014/05/07 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
创业计划书之旅游网站
2019/09/06 职场文书