Sub MultiSelect(PName, CName, initCValue)
Dim ParentSQL, ChildSQL
Dim Rs, Rs1, i, initPvalue
Dim pTitle
Dim cTxt, cValue
Dim ParentElement
ConnectionDatabase
' 父分类的SQL语句
ParentSQL = "Select ID, Title From ArticleClass where ParentID = 0"
' 子分类的分类语句 条件是 ParentID = 父分类的 第一个字段
ChildSQL = "Select ID, Title From ArticleClass where ParentID = "
if initCValue <>"" then
'由子分类回找父分类的初始值
initPvalue = Conn.Execute("Select ParentID From ArticleClass where Id = "&initCValue)(0)
End if
Set Rs = Conn.Execute(ParentSQL)
i = 0
Response.Write("<script language=JavaScript>"&vbcrlf&_
" <!--"&vbcrlf&_
PName&"Text = new Array(); "&vbcrlf&_
PName&"Value = new Array(); "&vbcrlf)
Do while Not Rs.Eof
Set Rs1 = Conn.Execute(ChildSQL&Rs(0))
pTitle = Rs(1)
ParentElement = ParentElement&"<option value="&Rs(0)&">"&Rs(1)&"</option>"&vbcrlf
if Not Rs1.Eof Then
cTxt = Rs1(1)
cValue = Rs1(0)
Rs1.MoveNext
End If
Do while Not Rs1.Eof
cTxt = cTxt&"|"&Rs1(1)
cValue = cValue&"|"&Rs1(0)
Rs1.MoveNext
Loop
Response.Write(PName&"Text["&i&"]= new Array('"&pTitle&"', '"&cTxt&"');"&vbcrlf)
Response.Write(PName&"Value["&i&"]= new Array('"&pTitle&"', '"&cValue&"');"&vbcrlf)
i = i + 1
Rs1.Close: Set Rs1 = Nothing
Rs.MoveNext
Loop
Rs.Close: Set Rs = Nothing
Response.Write("function Change"&PName&"(obj) "&vbcrlf)
Response.Write(" { "&vbcrlf)
Response.Write(" var _selectObj = document.getElementById('"&CName&"'); "&vbcrlf)
Response.Write(" var _Text; "&vbcrlf)
Response.Write(" var _Value; "&vbcrlf)
Response.Write(" var txt;"&vbcrlf)
Response.Write(" txt = obj.options[obj.selectedIndex].text; "&vbcrlf)
Response.Write(" for(i=0; i< "&PName&"Text.length; i++) "&vbcrlf)
Response.Write(" { "&vbcrlf)
Response.Write(" if("&PName&"Text[i][0] == txt) "&vbcrlf)
Response.Write(" { "&vbcrlf)
Response.Write(" _Text = "&PName&"Text[i][1].split('|'); "&vbcrlf)
Response.Write(" _Value = "&PName&"Value[i][1].split('|'); "&vbcrlf)
Response.Write(" } "&vbcrlf)
Response.Write(" } "&vbcrlf)
Response.Write(" _selectObj.length = 0; "&vbcrlf)
Response.Write(" _selectObj.length = _Text.length; "&vbcrlf)
Response.Write(" "&vbcrlf)
Response.Write(" for (i = 0 ;i <_Text.length;i++) "&vbcrlf)
Response.Write(" { "&vbcrlf)
Response.Write(" _selectObj.options[i] = new Option(_Text[i],_Value[i]); "&vbcrlf)
Response.Write(" } "&vbcrlf)
Response.Write(" } "&vbcrlf)
Response.Write("</script>"&vbcrlf)
Response.Write("<select name="&PName&" id="&PName&" onChange = ""Change"&PName&"(this)"">"&vbcrlf&_
ParentElement&_
" </select>"&vbcrlf)
Response.Write("<select name="&CName&" id="&CName&">"&vbcrlf&_
" </select>"&vbcrlf)
Response.Write("<script language=Javascript> "&vbcrlf)
Response.Write("function init(value1,value2) { "&vbcrlf)
Response.Write(" "&vbcrlf)
Response.Write(" var _selectObj1 = document.getElementById('"&PName&"'); "&vbcrlf)
Response.Write(" var _selectObj2 = document.getElementById('"&CName&"'); "&vbcrlf)
Response.Write(" if (value1!='') "&vbcrlf)
Response.Write(" { "&vbcrlf)
Response.Write(" for(i=0; i< _selectObj1.length; i++) "&vbcrlf)
Response.Write(" { "&vbcrlf)
Response.Write(" if(_selectObj1.options[i].value == value1) "&vbcrlf)
Response.Write(" { "&vbcrlf)
Response.Write(" _selectObj1.selectedIndex = i; "&vbcrlf)
Response.Write(" ChangeParentID(_selectObj1); "&vbcrlf)
Response.Write(" break; "&vbcrlf)
Response.Write(" } "&vbcrlf)
Response.Write(" } "&vbcrlf)
Response.Write(" } "&vbcrlf)
Response.Write(" if (value2!='') "&vbcrlf)
Response.Write(" { "&vbcrlf)
Response.Write(" for(i=0; i< _selectObj2.length; i++) "&vbcrlf)
Response.Write(" { "&vbcrlf)
Response.Write(" if(_selectObj2.options[i].value == value2) "&vbcrlf)
Response.Write(" {"&vbcrlf)
Response.Write(" _selectObj2.selectedIndex = i; "&vbcrlf)
Response.Write(" break; "&vbcrlf)
Response.Write(" }"&vbcrlf)
Response.Write(" } "&vbcrlf)
Response.Write(" } "&vbcrlf)
Response.Write("}"&vbcrlf)
Response.Write("Change"&PName&"(document.getElementById('"&PName&"')) "&vbcrlf)
if initCValue <>"" Then
Response.Write("init('"&initPvalue&"', '"&initCValue&"'); "&vbcrlf)
End If
Response.Write("</script>"&vbcrlf)
End Sub
==========调用方法===========
<%Call MultiSelect("ParentID","ClassID", "")%>
ParentID 和 ClassID 就是Select的ID值.以后用来Request("ParenID")的