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 判断浏览器类型及版本
Feb 21 Javascript
jquery下json数组的操作实现代码
Aug 09 Javascript
jquery无缝向上滚动实现代码
Mar 29 Javascript
js单独获取一个checkbox看其是否被选中
Sep 22 Javascript
node.js中的path.resolve方法使用说明
Dec 08 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
Oct 30 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
Apr 26 jQuery
vue中的过滤器实例代码详解
Jun 06 Javascript
小程序点击图片实现png转jpg
Oct 22 Javascript
electron踩坑之dialog中的callback解决
Oct 06 Javascript
Echarts如何重新渲染实例详解
May 30 Javascript
uniapp引入支付宝原生扫码插件步骤详解
Jul 23 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的XML文件解释类应用实例
2014/09/22 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
JS 建立对象的方法
2007/04/21 Javascript
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
详细解读Python中解析XML数据的方法
2015/10/15 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
Python自动生产表情包
2017/03/17 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
简单了解Django项目应用创建过程
2020/07/06 Python
python给list排序的简单方法
2020/12/10 Python
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
公司搬迁通知
2015/04/20 职场文书
芙蓉镇观后感
2015/06/10 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
公历12个月名称的由来
2022/04/12 杂记
Vue router配置与使用分析讲解
2022/12/24 Vue.js