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中的事件处理
Jan 16 Javascript
iframe 异步加载技术及性能分析
Jul 19 Javascript
javascript变量作用域使用中常见错误总结
Mar 26 Javascript
用js的for循环获取radio选中的值
Oct 21 Javascript
jQuery 选择器详解
Jan 19 Javascript
JS实现调用本地摄像头功能示例
May 18 Javascript
webpack4的迁移的使用方法
May 25 Javascript
webstrom Debug 调试vue项目的方法步骤
Jul 17 Javascript
详解React项目中碰到的IE问题
Mar 14 Javascript
WEEX环境搭建与入门详解
Oct 16 Javascript
在项目vue中使用echarts的操作步骤
Sep 07 Javascript
js对象属性名驼峰式转下划线的实例代码
Sep 17 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页面间传递参数实例代码
2008/06/05 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
PHP分享图片的生成方法
2018/04/25 PHP
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
Python检测网站链接是否已存在
2016/04/07 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
python 魔法函数实例及解析
2019/09/25 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
杭州时比特电子有限公司SQL
2013/08/22 面试题
房地产销售员的自我评价分享
2013/12/04 职场文书
追悼会子女答谢词
2014/01/28 职场文书
《我的信念》教学反思
2014/02/15 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书
小学美术教学反思
2016/02/17 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
php解析非标准json、非规范json的方式实例
2022/05/10 PHP