js控制option的隱select多級聯(lián)動
來源:易賢網(wǎng) 閱讀:3009 次 日期:2014-08-13 17:02:18
溫馨提示:易賢網(wǎng)小編為您整理了“js控制option的隱select多級聯(lián)動”,方便廣大網(wǎng)友查閱!

二級聯(lián)動,簡單的說就是,當(dāng)下拉列表A1的的值改變時,下一級下拉列表B1也跟著動,但是下拉列表B1的值是與下拉列表A1的值相對應(yīng)的。比如:A1選中“技術(shù)部”的話,B1的所有下拉項都顯示的是與A1相對應(yīng)的技術(shù)部成員,這個過程因為都是在客戶端執(zhí)行的不會在服務(wù)器端操作所以是無刷新實現(xiàn)的。

三級聯(lián)動或多級聯(lián)動,就是利用二級聯(lián)動的思想,第一級改變時,第二級跟著變,第三級跟著第二級變,第四級跟著第三級變。。。。

二級聯(lián)動,三級聯(lián)動,多級聯(lián)動實踐:

二級聯(lián)動,當(dāng)?shù)谝患夁x中一個改變選項,激發(fā)聯(lián)動函數(shù),這個函數(shù)用以改變第二個下拉列表的值,實現(xiàn)過程是,根據(jù)第一級傳過來的值遍歷數(shù)組,找到與第一級相對應(yīng)的選項,然后加到第二級列表上。

三級聯(lián)動或多級聯(lián)動,第一級改變時,第二級跟著變,第二級改變時,第三級跟著變。

二級聯(lián)動下拉列表的實現(xiàn)是通過一個函數(shù)來實現(xiàn)的,如果在實現(xiàn)三級聯(lián)動下拉列表或多級聯(lián)動下拉列表的話,我們是直接復(fù)制二級聯(lián)動下拉列表的函數(shù),改一下函數(shù)名及相關(guān)參數(shù),這樣是可以解決問題的,但咱們是做程序的,應(yīng)該讓自己的程序更通用話,盡量適應(yīng)各種情況,如果這樣一來,平白的又添加了一個函數(shù),并且如果是多級的話您就得重寫這個函數(shù)多次,然而,您也許會想到,多級聯(lián)動下拉列表與二級其實思想是一樣的,那么我們?yōu)槭裁床荒苡靡粋€函數(shù)來實現(xiàn)呢,并且一定是可以實現(xiàn)的,但這樣實現(xiàn)的人很少,為什么呢,一般都覺得沒這個必要,但每次遇到這樣的問題時還是得研究半天,今天我要給大家介紹的是,一個函數(shù)來實現(xiàn)多級聯(lián)動,使用的是類似與遞歸的思想,每一級onchange()時都會調(diào)用一個函數(shù),這個函數(shù)會改變下一級的值并激發(fā)其onchange(),這時下一級的onchange里如果還是調(diào)用這個函數(shù)的話,那么這個函數(shù)還會再次運行,直到最后一級,因為最后一級onchange=""所以他不會再激發(fā)下一級,完成所有聯(lián)動。

數(shù)組數(shù)據(jù)源可以接受兩種:  

1.["CategoryName","ParentCategoryName"]  即:["當(dāng)前名稱","父級名稱"]  

2.['CategoryName','ParentId','NowId']    即:["當(dāng)前名稱","父級ID","當(dāng)前ID"]  

上面說的父級,如果本身就是最上一級,那么父級就寫成0或"0"  

調(diào)用方法:  

網(wǎng)頁各級聯(lián)(聯(lián)動)下拉列表必須含有兩個屬性:id,onchange.  

最后一個下拉列表onchange=""(空,但必須寫上)。  

函數(shù)調(diào)用方法:ChangeSelect(上一級的值,下一級Select控件的ID值,下一級Select控件要選中的值(即value而非text),數(shù)據(jù)源數(shù)組名,默認(rèn)顯示字符(如:請選擇...如果不寫的話會用默認(rèn)值填充)),  

舉例:  

第一級<select id="province"  onchange="ChangeSelect(this.value,'city','',ArrCity3,'請選擇市')" ></select>  

第二級<select id="city" onchange="ChangeSelect(this.value,'area','',ArrCity3)" ></select>  

第三級<select id="area" onchange="" ></select>  

設(shè)置網(wǎng)頁加載完后運行一次,可以設(shè)置默認(rèn)值,默認(rèn)狀態(tài)下第一個參數(shù)是0 

看代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">

<html xmlns="">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>無標(biāo)題文檔</title>

<script language="JavaScript" type="text/javascript">

//ChangeSelect(上一級的值,下一級Select控件的ID值,下一級Select控件要選中的值(即value而非text),數(shù)據(jù)源數(shù)組名,默認(rèn)顯示字符(如:請選擇...如果不寫的話會用默認(rèn)值填充)),第一級的上級值為0

function ChangeSelect(ParentValue, NextId, NextSelectedValue, ArrObj,DefaultStr)

{

StrObj = eval(document.getElementById(NextId));

StrObj.length = 0;

//判斷它是二級數(shù)據(jù)源,還是三級

if (ArrObj.length > 0)

{

if (ArrObj[0].length == 2)

{ArrNum = 0;}

else

{ArrNum = 2;}

}

//顯示所有列表

for (i = 0; i < ArrObj.length; i++)

{

if (i == 0)

{

if (DefaultStr == undefined ) DefaultStr="==請選擇==";

StrObj.options[StrObj.length] = new Option(DefaultStr, "");

}

if (ArrObj[i][1] == ParentValue)

{

StrObj.options[StrObj.length] = new Option(ArrObj[i][0],ArrObj[i][ArrNum]);

}

}

//選中列表內(nèi)某一項

for (i = 0; i < StrObj.length; i++)

{

if (StrObj.options[i].value == NextSelectedValue)

{

StrObj.options[i].selected = true;

}

}

//激發(fā)下一級的onchange事件以實現(xiàn)多級級聯(lián)

StrObj.onchange();

}

//公司二維數(shù)組數(shù)據(jù)源

Office = [

["CategoryName","ParentCategoryName"],

["業(yè)務(wù)部","0"],

["技術(shù)部","0"],

["市場部","0"],

["業(yè)務(wù)部小柳","業(yè)務(wù)部"],

["業(yè)務(wù)部小楊","業(yè)務(wù)部"],

["業(yè)務(wù)部小菜","業(yè)務(wù)部"],

["技術(shù)部老柳","技術(shù)部"],

["技術(shù)部老楊","技術(shù)部"],

["技術(shù)部老菜","技術(shù)部"],

["市場部柳先生","市場部"],

["市場部楊先生","市場部"],

["市場部菜鳥","市場部"]

]

//省市二維數(shù)組數(shù)據(jù)源

City2 = [

["CategoryName","ParentCategoryName"],

["山西省","0"],

["河北省","0"],

["太原市","山西省"],

["運城市","山西省"],

["石家莊","河北省"],

["廊房","河北省"]

]

//省市三維數(shù)組數(shù)據(jù)源

City3 = [

["CategoryName","ParentId","Id"],

["北京","0","010"],

["山西","0","0359"],

["朝陽區(qū)","010","001"],

["海淀區(qū)","010","002"],

["豆各莊","001","101"],

["十里堡","001","102"],

["中關(guān)村","002","201"],

["上地","002","202"],

["運城地區(qū)","0359","301"],

["太原市","0359","302"],

["永濟市","301","311"],

["小區(qū)","302","312"]

];

</script>

</head>

<body>

<select id="office1"  onchange="ChangeSelect(this.value,'office2','',Office,'==人員==')" style="width:100px"></select>

<select id="office2" onchange="" style="width:100px"></select>

<script language="JavaScript" type="text/javascript">ChangeSelect('0','office1','',Office,'==部門==') </script>

<br />

<select id="City001"  onchange="ChangeSelect(this.value,'City002','',City2)" style="width:100px"></select>

<select id="City002" onchange="" style="width:100px"></select>

<script language="JavaScript" type="text/javascript">ChangeSelect('0','City001','',City2) </script>

<br />

<select id="City3001"  onchange="ChangeSelect(this.value,'City3002','',City3)" style="width:100px"></select>

<select id="City3002"  onchange="ChangeSelect(this.value,'City3003','',City3)" style="width:100px"></select>

<select id="City3003" onchange="" style="width:100px"></select>

<script language="JavaScript" type="text/javascript">ChangeSelect('0','City3001','0359',City3) </script>

<br />

</body>

</html>

更多信息請查看IT技術(shù)專欄

更多信息請查看腳本欄目
上一篇:jquery對象訪問
易賢網(wǎng)手機網(wǎng)站地址:js控制option的隱select多級聯(lián)動
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)