js操作二級(jí)聯(lián)動(dòng)實(shí)現(xiàn)代碼
更新時(shí)間:2010年07月27日 09:08:15 作者:
網(wǎng)上二級(jí)(多級(jí))聯(lián)動(dòng)的例子也不少,有各種不同的操作方法。我所采用的方法網(wǎng)上也應(yīng)該有的,不過(guò)我還沒(méi)有看到過(guò)。
表結(jié)構(gòu)
二級(jí)或多級(jí)聯(lián)動(dòng)主要是以數(shù)據(jù)庫(kù)中具有父編號(hào)的表為基礎(chǔ),這個(gè)也不例外
id,parent_id,name 三列。
采用js操作
先說(shuō)下數(shù)據(jù)在js中的存儲(chǔ)方式。
主要用二維數(shù)組來(lái)存儲(chǔ)數(shù)據(jù)。結(jié)構(gòu)如下:
a[父編號(hào)]=[[子編號(hào)1,子名稱1],[子編號(hào)2,子名稱2],[子編號(hào)3,子名稱3],……];
首先用父編號(hào)獲取所有的子數(shù)據(jù),在把子數(shù)據(jù)的編號(hào)及名稱綁定在dropdown中
第一步 二級(jí)聯(lián)動(dòng)數(shù)據(jù)(后面說(shuō)這些數(shù)據(jù)怎么得到)
var cities=new Array();
cities['00000000-0000-0000-0000-000000000000']=[['028db215-8bd7-45ab-bbaa-1efa175c35ca','長(zhǎng)春'],['bcb32195-2a46-4cd1-9472-6383e8fa55cc','沈陽(yáng)']];
var schools=new Array();
schools['028db215-8bd7-45ab-bbaa-1efa175c35ca']=[['5f22403a-7a59-4b7f-b62d-9451298cbd00','長(zhǎng)春1'],['e8f0f665-9a9a-4c44-83fd-598e8a28dcd7','長(zhǎng)春2']];
schools['bcb32195-2a46-4cd1-9472-6383e8fa55cc']=[['4a743dbf-1fdc-4907-a44e-8d169d715664','沈陽(yáng)1']];
第一級(jí)為城市數(shù)據(jù),第二級(jí)為學(xué)校數(shù)據(jù)。
第二步 設(shè)置數(shù)據(jù)在dropdown中顯示
//根據(jù)父編號(hào)獲取相應(yīng)的子數(shù)據(jù),并顯示在obj控件中
//type=0 城市,1學(xué)校
//pid 父編號(hào)
//obj 要顯示數(shù)據(jù)的dropdown
function SetRegions(type,pid,obj)
{
var text="<option value='00000000-0000-0000-0000-000000000001'>請(qǐng)選擇</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);
}
第三步 城市改變的時(shí)候 選擇學(xué)校數(shù)據(jù)
//用城市編號(hào)設(shè)置學(xué)校子數(shù)據(jù)
function CityChanged(){
SetRegions (1,$("#cities").val(),"#schools");
}
第四步 當(dāng)然在修改的時(shí)候需要進(jìn)行初始化,這也是以前我最頭疼的問(wèn)題
//初始化 城市 學(xué)校值
//cityId 城市編號(hào)
//schoolId 學(xué)校編號(hào)
function InitRegions(cityId,schoolId)
{
//初始化城市數(shù)據(jù)
//SetRegions(0,"00000000-0000-0000-0000-000000000000","#cities");
//查找城市并設(shè)為默認(rèn)值
$("#cities option[value="+cityId+"]").attr("selected","selected");
if(schoolId!="00000000-0000-0000-0000-000000000001"){
//初始化學(xué)校數(shù)據(jù)
SetRegions(1,cityId,"#schools");
//查找學(xué)校并設(shè)為默認(rèn)值
$("#schools option[value="+schoolId+"]").attr("selected","selected");
}
}
前臺(tái)代碼
<%--城市--%>
<select runat="server" id="cities" onchange="CityChanged();">
</select>
<%--學(xué)校--%>
<select runat="server" id="schools" >
</select>
<script type="text/javascript">
SetRegions(0,'00000000-0000-0000-0000-000000000000',"#cities");//設(shè)置城市第一級(jí)
var cityId='<asp:Literal ID="Literal_cityId" runat="server"></asp:Literal>';//初始化的城市編號(hào)
var schoolId= '<asp:Literal ID="Literal_schoolId" runat="server"></asp:Literal>';//初始化的學(xué)校編號(hào)
InitRegions(cityId,schoolId);//初始化
</script>
后臺(tái)使用
后臺(tái)初始化
Literal_cityId.Text = "";//初始化城市id
Literal_schoolId.Text = "";//初始化學(xué)校id
后臺(tái)獲取選擇項(xiàng)值
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"];
至此基本就完事了
現(xiàn)在看看如何獲取js聯(lián)動(dòng)數(shù)據(jù)文件
/// <summary>
/// 生成區(qū)域js文件
/// </summary>
private void CreateRegions()
{
#region 獲取區(qū)域文件信息
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 學(xué)校信息
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
}
把頁(yè)面輸出的js聯(lián)動(dòng)數(shù)據(jù)直接復(fù)制到j(luò)s文件中即可
其中也可以根據(jù)自己需要改為三級(jí)、多級(jí)聯(lián)動(dòng),都是一樣的道理。
希望能對(duì)大家有幫助
二級(jí)或多級(jí)聯(lián)動(dòng)主要是以數(shù)據(jù)庫(kù)中具有父編號(hào)的表為基礎(chǔ),這個(gè)也不例外
id,parent_id,name 三列。
采用js操作
先說(shuō)下數(shù)據(jù)在js中的存儲(chǔ)方式。
主要用二維數(shù)組來(lái)存儲(chǔ)數(shù)據(jù)。結(jié)構(gòu)如下:
a[父編號(hào)]=[[子編號(hào)1,子名稱1],[子編號(hào)2,子名稱2],[子編號(hào)3,子名稱3],……];
首先用父編號(hào)獲取所有的子數(shù)據(jù),在把子數(shù)據(jù)的編號(hào)及名稱綁定在dropdown中
第一步 二級(jí)聯(lián)動(dòng)數(shù)據(jù)(后面說(shuō)這些數(shù)據(jù)怎么得到)
復(fù)制代碼 代碼如下:
var cities=new Array();
cities['00000000-0000-0000-0000-000000000000']=[['028db215-8bd7-45ab-bbaa-1efa175c35ca','長(zhǎng)春'],['bcb32195-2a46-4cd1-9472-6383e8fa55cc','沈陽(yáng)']];
var schools=new Array();
schools['028db215-8bd7-45ab-bbaa-1efa175c35ca']=[['5f22403a-7a59-4b7f-b62d-9451298cbd00','長(zhǎng)春1'],['e8f0f665-9a9a-4c44-83fd-598e8a28dcd7','長(zhǎng)春2']];
schools['bcb32195-2a46-4cd1-9472-6383e8fa55cc']=[['4a743dbf-1fdc-4907-a44e-8d169d715664','沈陽(yáng)1']];
第一級(jí)為城市數(shù)據(jù),第二級(jí)為學(xué)校數(shù)據(jù)。
第二步 設(shè)置數(shù)據(jù)在dropdown中顯示
復(fù)制代碼 代碼如下:
//根據(jù)父編號(hào)獲取相應(yīng)的子數(shù)據(jù),并顯示在obj控件中
//type=0 城市,1學(xué)校
//pid 父編號(hào)
//obj 要顯示數(shù)據(jù)的dropdown
function SetRegions(type,pid,obj)
{
var text="<option value='00000000-0000-0000-0000-000000000001'>請(qǐng)選擇</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);
}
第三步 城市改變的時(shí)候 選擇學(xué)校數(shù)據(jù)
復(fù)制代碼 代碼如下:
//用城市編號(hào)設(shè)置學(xué)校子數(shù)據(jù)
function CityChanged(){
SetRegions (1,$("#cities").val(),"#schools");
}
第四步 當(dāng)然在修改的時(shí)候需要進(jìn)行初始化,這也是以前我最頭疼的問(wèn)題
復(fù)制代碼 代碼如下:
//初始化 城市 學(xué)校值
//cityId 城市編號(hào)
//schoolId 學(xué)校編號(hào)
function InitRegions(cityId,schoolId)
{
//初始化城市數(shù)據(jù)
//SetRegions(0,"00000000-0000-0000-0000-000000000000","#cities");
//查找城市并設(shè)為默認(rèn)值
$("#cities option[value="+cityId+"]").attr("selected","selected");
if(schoolId!="00000000-0000-0000-0000-000000000001"){
//初始化學(xué)校數(shù)據(jù)
SetRegions(1,cityId,"#schools");
//查找學(xué)校并設(shè)為默認(rèn)值
$("#schools option[value="+schoolId+"]").attr("selected","selected");
}
}
前臺(tái)代碼
復(fù)制代碼 代碼如下:
<%--城市--%>
<select runat="server" id="cities" onchange="CityChanged();">
</select>
<%--學(xué)校--%>
<select runat="server" id="schools" >
</select>
<script type="text/javascript">
SetRegions(0,'00000000-0000-0000-0000-000000000000',"#cities");//設(shè)置城市第一級(jí)
var cityId='<asp:Literal ID="Literal_cityId" runat="server"></asp:Literal>';//初始化的城市編號(hào)
var schoolId= '<asp:Literal ID="Literal_schoolId" runat="server"></asp:Literal>';//初始化的學(xué)校編號(hào)
InitRegions(cityId,schoolId);//初始化
</script>
后臺(tái)使用
后臺(tái)初始化
復(fù)制代碼 代碼如下:
Literal_cityId.Text = "";//初始化城市id
Literal_schoolId.Text = "";//初始化學(xué)校id
后臺(tái)獲取選擇項(xiàng)值
復(fù)制代碼 代碼如下:
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"];
至此基本就完事了
現(xiàn)在看看如何獲取js聯(lián)動(dòng)數(shù)據(jù)文件
復(fù)制代碼 代碼如下:
/// <summary>
/// 生成區(qū)域js文件
/// </summary>
private void CreateRegions()
{
#region 獲取區(qū)域文件信息
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 學(xué)校信息
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
}
把頁(yè)面輸出的js聯(lián)動(dòng)數(shù)據(jù)直接復(fù)制到j(luò)s文件中即可
其中也可以根據(jù)自己需要改為三級(jí)、多級(jí)聯(lián)動(dòng),都是一樣的道理。
希望能對(duì)大家有幫助
您可能感興趣的文章:
- js實(shí)現(xiàn)的全國(guó)省市二級(jí)聯(lián)動(dòng)下拉選擇菜單完整實(shí)例
- 最好用的二級(jí)聯(lián)動(dòng) 原生js實(shí)現(xiàn)你值得擁有
- jsp從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)填充下拉框?qū)崿F(xiàn)二級(jí)聯(lián)動(dòng)菜單的方法
- 全國(guó)省市二級(jí)聯(lián)動(dòng)下拉菜單 js版
- js實(shí)現(xiàn)select二級(jí)聯(lián)動(dòng)下拉菜單
- js實(shí)現(xiàn)的下拉框二級(jí)聯(lián)動(dòng)效果
- 簡(jiǎn)單js代碼實(shí)現(xiàn)selece二級(jí)聯(lián)動(dòng)(推薦)
- JS簡(jiǎn)單實(shí)現(xiàn)城市二級(jí)聯(lián)動(dòng)選擇插件的方法
- javascript支持區(qū)號(hào)輸入的省市二級(jí)聯(lián)動(dòng)下拉菜單
- js實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)簡(jiǎn)單實(shí)例
相關(guān)文章
前端實(shí)現(xiàn)無(wú)感刷新的詳細(xì)方案
無(wú)感刷新(Silent Refresh)是指在用戶無(wú)感知的情況下,通過(guò)技術(shù)手段自動(dòng)更新身份憑證(如Token),維持用戶登錄狀態(tài)的技術(shù)方案,本文給大家介紹了前端實(shí)現(xiàn)無(wú)感刷新的詳細(xì)方案,需要的朋友可以參考下2025-03-03
layer彈窗在鍵盤按回車將反復(fù)刷新的實(shí)現(xiàn)方法
今天小編就為大家分享一篇layer彈窗在鍵盤按回車將反復(fù)刷新的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
基于JavaScript實(shí)現(xiàn)拖動(dòng)滑塊效果
這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)拖動(dòng)滑塊效果,拖動(dòng)滑塊時(shí)數(shù)字進(jìn)行變化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
javascript實(shí)現(xiàn)的登陸遮罩效果匯總
小編給大家推薦幾款使用Javascript實(shí)現(xiàn)的遮罩效果登陸框,其實(shí)這種效果是很常見(jiàn)的,在許多互動(dòng)的社區(qū)及其它的一些地方,彈出框應(yīng)用想當(dāng)流行,在不妨礙網(wǎng)頁(yè)運(yùn)行的情況下,用戶可以輸入登錄信息,實(shí)現(xiàn)完美登錄。2015-11-11
Easyui form combobox省市區(qū)三級(jí)聯(lián)動(dòng)
這篇文章主要介紹了Easyui form combobox省市區(qū)三級(jí)聯(lián)動(dòng) 的相關(guān)資料,需要的朋友可以參考下2016-01-01

