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 相关文章推荐
Javascript this指针
Jul 30 Javascript
javascript+css 网页每次加载不同样式的实现方法
Dec 27 Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 Javascript
Jquery通过Ajax访问XML数据的小例子
Nov 18 Javascript
jQuery实现放大镜效果实例代码
Mar 17 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
Aug 11 Javascript
js下拉菜单生成器dropMenu使用方法详解
Aug 01 Javascript
AjaxUpLoad.js实现文件上传
Mar 05 Javascript
Vue路由前后端设计总结
Aug 06 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
Jan 03 Javascript
JS校验与最终登陆界面功能完整示例
Jan 13 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
May 06 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 str_replace的替换漏洞
2008/03/15 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
php curl请求信息和返回信息设置代码实例
2015/04/27 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
2019/07/31 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
在Docker上开始部署Python应用的教程
2015/04/17 Python
python显示生日是星期几的方法
2015/05/27 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
写给女生的道歉信
2014/01/08 职场文书
毕业典礼演讲稿
2014/05/13 职场文书
科技之星事迹材料
2014/06/02 职场文书
临床医学专业求职信
2014/08/08 职场文书
个人汇报材料范文
2014/12/30 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
高中团支书竞选稿
2015/11/21 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
ORACLE查看当前账号的相关信息
2021/06/18 Oracle