jquery+json 通用三级联动下拉列表


Posted in Javascript onApril 19, 2010

Author: shaoyun
Email: shaoyun (at) yeah.net
Date: 2010-03-10 02:03
Blog: http://shaoyun.cnblogs.com/

用Jquery实现,原始代码只支持IE,这里我改了一下,我的代码里面有三个版本的实现
第一个是通过读取XML构建,支持IE/firefox,chrome不支持,有兴趣的可以将读取XML的部分改成AJAX的方式,这样chrome支持就不成问题
第二个是采用Json数据格式构建,是我的第二次尝试改进
第三个与第二个其实是一样的,只不过将数据分离到JS文件中,我的代码中有一个ASP文件,是调用数据库生成Json省市区数据的,如果页面直接调用ASP文件,速度会很慢,生成JS文件后直接调用就要快的多,而且这部分数据一般不会改动

更新记录:

++2010-04-19 12:11:24
多加了一个插件的例子,其实不算插件,就是一函数,为什么不写成插件,只是基于灵活性的考虑,
让select可以放在页面的任何位置,而不是局限在div、table、td等页面元素内
参数类似下面,s1/s2/s3配置select的id,v1/v2/v3为默认值,如果不想设置请设置为null,或者直接不设置

参数配置如下,配置select的三个ID和默认值就行,无默认值填写为null

var defaults = { 
s1:'Select1', 
s2:'Select2', 
s3:'Select3', 
v1:null, 
v2:null, 
v3:null 
};

这算是第四个例子,目录下的php文件是服务端数据的生成Demo,用作使用的参考

数据格式定义类似如下:

var threeSelectData={ 
"省份":{val:"",items:{"城市":{val:"",items:{"区县":""}}}}, 
"beijing":{val:"01",items:{ 
"bj-01":{val:"0101",items:{ 
"bj-01-01":"010101" 
}}, 
"bj-02":{val:"0102",items:{ 
"bj-02-01":"010201", 
"bj-02-02":"010202" 
}} 
}}, 
"shanxi":{val:"02",items:{}}, 
"guangzhou":{val:"02",items:{}} 
};

代码例子:

<script type="text/javascript" src="../jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="areadata.js"></script> 
<script type="text/javascript"> 
/* 
通用三级联动说明 
参数配置如下,配置select的三个ID和默认值就行,无默认值填写为null 
var defaults = { 
s1:'Select1', 
s2:'Select2', 
s3:'Select3', 
v1:null, 
v2:null, 
v3:null 
}; 
*/ 
var defaults = { 
s1:'Select1', 
s2:'Select2', 
s3:'Select3', 
v1:120000, 
v2:120200, 
v3:120224 
}; 
$(function(){ 
threeSelect(defaults); 
}); 
function threeSelect(config){ 
var $s1=$("#"+config.s1); 
var $s2=$("#"+config.s2); 
var $s3=$("#"+config.s3); 
var v1=config.v1?config.v1:null; 
var v2=config.v2?config.v2:null; 
var v3=config.v3?config.v3:null; 
$.each(threeSelectData,function(k,v){ 
appendOptionTo($s1,k,v.val,v1); 
}); 
$s1.change(function(){ 
$s2.html(""); 
$s3.html(""); 
if(this.selectedIndex==-1) return; 
var s1_curr_val = this.options[this.selectedIndex].value; 
$.each(threeSelectData,function(k,v){ 
if(s1_curr_val==v.val){ 
if(v.items){ 
$.each(v.items,function(k,v){ 
appendOptionTo($s2,k,v.val,v2); 
}); 
} 
} 
}); 
if($s2[0].options.length==0){appendOptionTo($s2,"...","",v2);} 
$s2.change(); 
}).change(); 
$s2.change(function(){ 
$s3.html(""); 
var s1_curr_val = $s1[0].options[$s1[0].selectedIndex].value; 
if(this.selectedIndex==-1) return; 
var s2_curr_val = this.options[this.selectedIndex].value; 
$.each(threeSelectData,function(k,v){ 
if(s1_curr_val==v.val){ 
if(v.items){ 
$.each(v.items,function(k,v){ 
if(s2_curr_val==v.val){ 
$.each(v.items,function(k,v){ 
appendOptionTo($s3,k,v,v3); 
}); 
} 
}); 
if($s3[0].options.length==0){appendOptionTo($s3,"...","",v3);} 
} 
} 
}); 
}).change(); 
function appendOptionTo($o,k,v,d){ 
var $opt=$("<option>").text(k).val(v); 
if(v==d){$opt.attr("selected", "selected")} 
$opt.appendTo($o); 
} 
} 
</script> 
<style type="text/css" media="screen"> 
select{width:80px;} 
</style> 
<select id="Select1" name="Select1"></select> 
<select id="Select2" name="Select2"></select> 
<select id="Select3" name="Select3"></select>

文字没有详细整理!懂点JS的就能看懂!

代码打包下载

Javascript 相关文章推荐
JS实现打开本地文件或文件夹
Mar 09 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
Apr 02 Javascript
jquery ajax提交整个表单元素的快捷办法
Mar 27 Javascript
jquery 删除cookie失效的解决方法
Nov 12 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
Dec 23 Javascript
JQuery实现动态添加删除评论的方法
May 18 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
Sep 10 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
Jan 17 Javascript
使用原生js封装的ajax实例(兼容jsonp)
Oct 12 Javascript
js+html5实现手机九宫格密码解锁功能
Jul 30 Javascript
vue通信方式EventBus的实现代码详解
Jun 10 Javascript
javascript中的变量是传值还是传址的?
Apr 19 #Javascript
js获取当前select 元素值的代码
Apr 19 #Javascript
监控 url fragment变化的js代码
Apr 19 #Javascript
jquery获取input表单值的代码
Apr 19 #Javascript
编写高性能的JavaScript 脚本的加载与执行
Apr 19 #Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
Apr 18 #Javascript
jquery 新手学习常见问题解决方法
Apr 18 #Javascript
You might like
WordPress判断用户是否登录的代码
2011/03/17 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
python发布模块的步骤分享
2014/02/21 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
python适合人工智能的理由和优势
2019/06/28 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
计算机应用与科学个人的自我评价
2013/11/15 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
运动会广播稿500字
2014/01/28 职场文书
英语课外活动总结
2014/08/27 职场文书
干部培训简讯
2015/07/20 职场文书
初三数学教学反思
2016/02/17 职场文书