基于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 相关文章推荐
扩展IE中一些不兼容的方法如contains、startWith等等
Jan 09 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
Jan 13 Javascript
基于javascript实现彩票随机数生成(简单版)
Apr 17 Javascript
Jquery zTree 树控件异步加载操作
Feb 25 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
May 12 Javascript
jQuery 限制输入字符串长度
Jun 20 Javascript
如何获取元素的最终background-color
Feb 06 Javascript
利用js编写网页进度条效果
Oct 08 Javascript
JS使用栈判断给定字符串是否是回文算法示例
Mar 04 Javascript
原生JS实现贪吃蛇小游戏
Mar 09 Javascript
Nuxt配置Element-UI按需引入的操作方法
Jul 06 Javascript
JS数组的常用方法整理
Mar 31 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
Zerg基本策略
2020/03/14 星际争霸
如何使用PHP中的字符串函数
2006/10/09 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
来自qq的javascript面试题
2010/07/24 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
js实现批量删除功能
2020/08/27 Javascript
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
python简单文本处理的方法
2015/07/10 Python
Django自定义认证方式用法示例
2017/06/23 Python
浅谈python中的占位符
2017/11/09 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
高中生的学习总结自我鉴定
2013/10/26 职场文书
安全员岗位职责
2013/11/11 职场文书
上班看电影检讨书
2014/02/12 职场文书
寒假安全保证书
2015/02/28 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python