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 相关文章推荐
清除网页历史记录,屏蔽后退按钮!
Dec 22 Javascript
javascript 写类方式之四
Jul 05 Javascript
3款实用的在线JS代码工具(国外)
Mar 15 Javascript
js console.log打印对像与数组用法详解
Jan 21 Javascript
js,jq,css多方面实现简易下拉菜单功能
May 13 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
js中this对象用法分析
Jan 05 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
Sep 29 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
Apr 22 Javascript
vue实现表格过滤功能
Sep 27 Javascript
功能完善的小程序日历组件的实现
Mar 31 Javascript
三剑客:offset、client和scroll还傻傻分不清?
Dec 04 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
桌面中心(一)创建数据库
2006/10/09 PHP
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
对象的类型:本地对象(1)
2006/12/29 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
Python Requests安装与简单运用
2016/04/07 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
Python生成随机密码的方法
2017/06/16 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
python之文件读取一行一行的方法
2018/07/12 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
将python安装信息加入注册表的示例
2019/11/20 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
Python实现FLV视频拼接功能
2020/01/21 Python
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
后勤部经理岗位职责
2014/02/23 职场文书
父母对孩子说的话
2014/04/12 职场文书
电台编导求职信
2014/05/06 职场文书
教师师德承诺书2016
2016/03/25 职场文书
javascript数组includes、reduce的基本使用
2021/07/02 Javascript