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 相关文章推荐
jQuery入门问答 整理的几个常见的初学者问题
Feb 22 Javascript
JSQL SQLProxy 的 php 版本代码
May 05 Javascript
JQuery的Alert消息框插件使用介绍
Oct 09 Javascript
JS子父窗口互相操作取值赋值的方法介绍
May 11 Javascript
基于JQuery制作可编辑的表格特效
Dec 23 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
Apr 29 Javascript
原生JS实现-星级评分系统的简单实例
Aug 21 Javascript
详解JS数组Reduce()方法详解及高级技巧
Aug 18 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
May 13 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
Jun 08 Javascript
基于Vue中的父子传值问题解决
Jul 27 Javascript
原生JavaScript实现随机点名表
Jan 14 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
PHP4实际应用经验篇(5)
2006/10/09 PHP
php强制运行广告的方法
2014/12/01 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
JavaScript中的连续赋值问题实例分析
2019/07/12 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
python操作cfg配置文件方式
2019/12/22 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
Collection和Collections的区别
2016/05/02 面试题
什么是Remote Module
2016/06/10 面试题
应用外语系自荐信
2014/06/26 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
2014年服务员工作总结
2014/11/18 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python
Python制作一个随机抽奖小工具的实现
2021/07/07 Python