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 相关文章推荐
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
Feb 03 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
May 19 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
基于javascript实现判断移动终端浏览器版本信息
Dec 09 Javascript
JS简单实现禁止访问某个页面的方法
Sep 13 Javascript
js 弹出虚拟键盘修改密码的简单实例
Oct 10 Javascript
vue.js绑定class和style样式(6)
Dec 09 Javascript
微信小程序 图片绝对定位(背景图片)
Apr 05 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 Javascript
vue router 配置路由的方法
Jul 26 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
Sep 18 Javascript
原生JS实现记忆翻牌游戏
Jul 31 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
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
php简单截取字符串代码示例
2016/10/19 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
深入认识javascript中的eval函数
2009/11/02 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
简单介绍Python中的len()函数的使用
2015/04/07 Python
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
python如何随机生成高强度密码
2020/08/19 Python
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
古驰英国官网:GUCCI英国
2020/03/07 全球购物
两只小狮子教学反思
2014/02/05 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
《学棋》教后反思
2014/04/14 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
初中英语课后反思
2014/04/25 职场文书
会计电算化实训报告
2014/11/04 职场文书
先进典型事迹材料
2014/12/29 职场文书
计算机专业自荐信
2015/03/05 职场文书
信访维稳承诺书
2015/05/04 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android