js操作二级联动实现代码


Posted in Javascript onJuly 27, 2010

表结构
二级或多级联动主要是以数据库中具有父编号的表为基础,这个也不例外
id,parent_id,name 三列。

采用js操作
先说下数据在js中的存储方式。
主要用二维数组来存储数据。结构如下:
a[父编号]=[[子编号1,子名称1],[子编号2,子名称2],[子编号3,子名称3],……];
首先用父编号获取所有的子数据,在把子数据的编号及名称绑定在dropdown中

第一步 二级联动数据(后面说这些数据怎么得到)

var cities=new Array(); 
cities['00000000-0000-0000-0000-000000000000']=[['028db215-8bd7-45ab-bbaa-1efa175c35ca','长春'],['bcb32195-2a46-4cd1-9472-6383e8fa55cc','沈阳']]; var schools=new Array(); 
schools['028db215-8bd7-45ab-bbaa-1efa175c35ca']=[['5f22403a-7a59-4b7f-b62d-9451298cbd00','长春1'],['e8f0f665-9a9a-4c44-83fd-598e8a28dcd7','长春2']]; 
schools['bcb32195-2a46-4cd1-9472-6383e8fa55cc']=[['4a743dbf-1fdc-4907-a44e-8d169d715664','沈阳1']];

第一级为城市数据,第二级为学校数据。
第二步 设置数据在dropdown中显示
//根据父编号获取相应的子数据,并显示在obj控件中 
//type=0 城市,1学校 
//pid 父编号 
//obj 要显示数据的dropdown 
function SetRegions(type,pid,obj) 
{ 
var text="<option value='00000000-0000-0000-0000-000000000001'>请选择</option>"; 
var tempArray=new Array(); 
if(type==0){ 
tempArray=cities[pid]; 
} else if (type==1){ 
tempArray=schools[pid];; 
} 
if(tempArray!=null) 
{ 
for(var i=0;i<tempArray.length;i++){ 
text+="<option value='"+tempArray[i][0]+"'>"+tempArray[i][1]+"</option>"; 
} 
} 
$(obj).html(text); 
}

第三步 城市改变的时候 选择学校数据

//用城市编号设置学校子数据 
function CityChanged(){ 
SetRegions (1,$("#cities").val(),"#schools"); 
}

第四步 当然在修改的时候需要进行初始化,这也是以前我最头疼的问题

//初始化 城市 学校值 
//cityId 城市编号 
//schoolId 学校编号 
function InitRegions(cityId,schoolId) 
{ 
//初始化城市数据 
//SetRegions(0,"00000000-0000-0000-0000-000000000000","#cities"); 
//查找城市并设为默认值 
$("#cities option[value="+cityId+"]").attr("selected","selected"); 
if(schoolId!="00000000-0000-0000-0000-000000000001"){ 
//初始化学校数据 
SetRegions(1,cityId,"#schools"); 
//查找学校并设为默认值 
$("#schools option[value="+schoolId+"]").attr("selected","selected"); 
} 
}

前台代码

<%--城市--%> 
<select runat="server" id="cities" onchange="CityChanged();"> 
</select> 
<%--学校--%> 
<select runat="server" id="schools" > 
</select> 
<script type="text/javascript"> 
SetRegions(0,'00000000-0000-0000-0000-000000000000',"#cities");//设置城市第一级 
var cityId='<asp:Literal ID="Literal_cityId" runat="server"></asp:Literal>';//初始化的城市编号 
var schoolId= '<asp:Literal ID="Literal_schoolId" runat="server"></asp:Literal>';//初始化的学校编号 
InitRegions(cityId,schoolId);//初始化 
</script>

后台使用
后台初始化

Literal_cityId.Text = "";//初始化城市id 
Literal_schoolId.Text = "";//初始化学校id

后台获取选择项值
string cityId = Request.Form["cities"] == null ? “00000000-0000-0000-0000-000000000001”: Request.Form["cities"]; 
string schoolId = Request.Form["schools"] == null ? “00000000-0000-0000-0000-000000000001”: Request.Form["schools"];

至此基本就完事了
现在看看如何获取js联动数据文件

/// <summary> 
/// 生成区域js文件 
/// </summary> 
private void CreateRegions() 
{ 
#region 获取区域文件信息 
string _cities = "var cities=new Array();<br/>"; 
string _schools = "var schools=new Array();<br/>"; 
DAL.RegionInfo dalRegion = new DAL.RegionInfo(); 
#region 城市信息 
DataTable dtcity = dalRegion.GetList("parent_id='" + “00000000-0000-0000-0000-000000000000”+ "'").Tables[0]; 
_cities += "cities['" + ParentId + "']=["; 
foreach (DataRow c in dtcity.Rows) 
{ 
_cities += "['" + c["id"].ToString() + "','" + c["name"].ToString() + "'],"; 
#region 学校信息 
DataTable dtschool = dalRegion.GetList(" parent_id='" + c["id"] + "'").Tables[0]; 
if (dtschool == null || dtschool.Rows.Count == 0) 
{ 
continue; 
} 
_schools += "schools['" + c["id"].ToString() + "']=["; 
foreach (DataRow s in dtschool.Rows) 
{ 
_schools += "['" + s["id"].ToString() + "','" + s["name"].ToString() + "'],"; 
} 
_schools = _schools.TrimEnd(',') + "];<br/>"; 
#endregion 
} 
_cities = _cities.TrimEnd(',') + "];<br/>"; 
#endregion 
Response.Write(_cities + "<br/><br/>"); 
Response.Write(_schools + "<br/><br/>"); 
#endregion 
}

把页面输出的js联动数据直接复制到js文件中即可
其中也可以根据自己需要改为三级、多级联动,都是一样的道理。
希望能对大家有帮助

Javascript 相关文章推荐
jQuery学习笔记之jQuery原型属性和方法
Jun 09 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
Sep 17 Javascript
JavaScript 模块的循环加载实现方法
Dec 13 Javascript
js点击文本框弹出可选择的checkbox复选框
Feb 03 Javascript
基于jQuery倒计时插件实现团购秒杀效果
May 13 Javascript
微信小程序 获取微信OpenId详解及实例代码
Oct 31 Javascript
JavaScript中最常用的10种代码简写技巧总结
Jun 28 Javascript
移动端效果之IndexList详解
Oct 20 Javascript
Angular6笔记之封装http的示例代码
Jul 27 Javascript
详解webpack自定义loader初探
Aug 29 Javascript
vue微信分享插件使用方法详解
Feb 18 Javascript
分享一款超好用的JavaScript 打包压缩工具
Apr 26 Javascript
jquery.jstree 增加节点的双击事件代码
Jul 27 #Javascript
基于jsTree的无限级树JSON数据的转换代码
Jul 27 #Javascript
XENON基于JSON变种
Jul 27 #Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
Jul 26 #Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
Jul 26 #Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
Jul 26 #Javascript
JQuery的Validation插件中Remote验证的中文问题
Jul 26 #Javascript
You might like
PHP 数组入门教程小结
2009/05/20 PHP
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
基于PHP CURL获取邮箱地址的详解
2013/06/03 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
js获取class的所有元素
2013/03/28 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
Python中操作MySQL入门实例
2015/02/08 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
Python 的AES加密与解密实现
2019/07/09 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
初入社会应届生求职信
2013/11/18 职场文书
领导检查欢迎词
2014/01/14 职场文书
戒赌保证书
2015/05/11 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
Mysql数据库命令大全
2021/05/26 MySQL
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技