基于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 相关文章推荐
新浪刚打开页面出来的全屏广告代码
Apr 02 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
Sep 04 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
Sep 25 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
Feb 26 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
Dec 03 Javascript
基于zepto.js简单实现上传图片
Jun 21 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
Sep 09 Javascript
vue模板语法-插值详解
Mar 06 Javascript
详细分析JS函数去抖和节流
Dec 05 Javascript
JS简单获取并修改input文本框内容的方法示例
Apr 08 Javascript
详解基于原生JS验证表单组件xy-form
Aug 20 Javascript
vue+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生成xml简单实例代码
2009/12/16 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
python创建和使用字典实例详解
2013/11/01 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
python scipy卷积运算的实现方法
2019/09/16 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
Python截图并保存的具体实例
2021/01/14 Python
css3实现动画的三种方式
2020/08/24 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
英国在线药房:Express Chemist
2019/03/28 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
2015年教师个人业务工作总结
2015/10/23 职场文书
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python
Python 多线程处理任务实例
2021/11/07 Python