程序是用ASP+Javascript实现的,ASP代码可以嵌套在Javascript的作用域中,如下所示:










实现双DropDownList互联需要借助Javascript中的数组实现,先定义数组,这里只是固定的写了几个数组,一般情况下,可根据需要用asp代码来实现:












Html页面上有两个DropDownList,在代码中我是用ASP来动态增加实现的,在这里为了表达清晰,就真接写出option选项,如下所示:








可以看出,第二个DropDownList是没有option的,是根据FClassSelect的选择来往DropDownField2中添加option,在FClassSelect的OnChange事件中,有下个changelocation函数,它就是往DropDownField2中添加相应的option。
函数的实现:

















OK,这样就实现了在两个DropDownList之间的互联,但是还是有一个问题 ,就是页面刚载入的时候,第二个DropDownList是绝对不会有任何选项的,必须要第一个DropDownlist中点另外一个,再点回来,才能显示出与它关联的选项。这个办法也好解决,只要在第二个DropDownList的HTML后面调用一次changelocation即可,如下:


<script language="javascript">
changelocation(subcat[0][0]);
</script>
下面是我项目中的程序:
<script language="javascript">
<%
dim conn2,rs2
call OpenConnRS(conn2,rs2)
rs2.open "SELECT * from FClass,SClass where FClass.FClass_ID=SClass.SClass_FClass_ID",conn2,1,1
%>
var onecount = <%=rs2.recordcount%>;
var subcat = new Array();
<%
count=0
do while not rs2.eof
%>
subcat[<%=count%>] = new Array("<%=trim(rs2("FClass_ID"))%>","<%=trim(rs2("FClass_Title"))%>","<%=trim(rs2("SClass_ID"))%>","<%=trim(rs2("SClass_Title"))%>");
<%
count=count+1
rs2.movenext
loop
rs2.close
conn2.close
%>
function changelocation(SClass_Id)
{
var optionlength = document.form2.FClass_Select2.options.length;
for(i=0;i<optionlength;i++)
document.form2.FClass_Select2.remove(0);
for(i=0;i<onecount;i++)
{
if(subcat[i][0]==SClass_Id)
{
var newOpt=window.document.createElement("option");
newOpt.text=subcat[i][3];
newOpt.value=subcat[i][2];
window.document.form2.FClass_Select2.options.add(newOpt);
}
}
}
</script>
<select name="FClassSelect" onChange="changelocation(document.form2.FClassSelect.options[document.form2.FClassSelect.selectedIndex].value)">
<%
rs.open "Select * from FClass",conn,1,1
for i=1 to rs.recordcount
Response.Write("<option value='"&rs("FClass_Id")&"'>"&rs("FClass_Title")&"</option>")
rs.movenext
next
rs.close()
%>
</select>
<select name="FClass_Select2" id="FClass_Select2" >
</select>
<script language="javascript">
changelocation(subcat[0][0]);
</script>
<%
dim conn2,rs2
call OpenConnRS(conn2,rs2)
rs2.open "SELECT * from FClass,SClass where FClass.FClass_ID=SClass.SClass_FClass_ID",conn2,1,1
%>
var onecount = <%=rs2.recordcount%>;
var subcat = new Array();
<%
count=0
do while not rs2.eof
%>
subcat[<%=count%>] = new Array("<%=trim(rs2("FClass_ID"))%>","<%=trim(rs2("FClass_Title"))%>","<%=trim(rs2("SClass_ID"))%>","<%=trim(rs2("SClass_Title"))%>");
<%
count=count+1
rs2.movenext
loop
rs2.close
conn2.close
%>
function changelocation(SClass_Id)
{
var optionlength = document.form2.FClass_Select2.options.length;
for(i=0;i<optionlength;i++)
document.form2.FClass_Select2.remove(0);
for(i=0;i<onecount;i++)
{
if(subcat[i][0]==SClass_Id)
{
var newOpt=window.document.createElement("option");
newOpt.text=subcat[i][3];
newOpt.value=subcat[i][2];
window.document.form2.FClass_Select2.options.add(newOpt);
}
}
}
</script>
<select name="FClassSelect" onChange="changelocation(document.form2.FClassSelect.options[document.form2.FClassSelect.selectedIndex].value)">
<%
rs.open "Select * from FClass",conn,1,1
for i=1 to rs.recordcount
Response.Write("<option value='"&rs("FClass_Id")&"'>"&rs("FClass_Title")&"</option>")
rs.movenext
next
rs.close()
%>
</select>
<select name="FClass_Select2" id="FClass_Select2" >
</select>
<script language="javascript">
changelocation(subcat[0][0]);
</script>