ASP+JS实现数据库驱动的三级联动下拉菜单
作者:索引拾光时间:2026-10-29 23:20:15浏览:412
本文介绍如何利用ASP后端与JavaScript前端技术,结合数据库数据实现三级联动下拉菜单。通过ADODB.Recordset获取类别数据并存储于JS数组,利用onChange事件动态更新下级菜单选项,无需刷新页面即可完成选择。
ASP+JS三级联动菜单实现原理
网络上常见的三级菜单实现方案往往代码繁琐,本示例提供了一种更为直观的解决方案。
首先必须确保已正确连接数据库,这是基础前提。
接下来需要了解数据库的具体结构设计。
一级类别表名为a,包含字段ID和Name。其中ID为主键,代表一级类别的ID值;Name存储一级类别的名称。
二级类别表名为aa,包含字段ID、aID和Name。ID为主键,代表二级类别的ID值;aID关联所属一级类别的ID值;Name存储二级类别的名称。
三级类别表名为aaa,包含字段ID、aID、aaID和Name。ID为主键,代表三级类别的ID值;aID关联所属一级类别的ID值;aaID关联所属二级类别的ID值;Name存储三级类别的名称。
可以使用test1.asp文件进行测试,该页面用于接收并输出所选类别的ID值。
<%
Response.Write "1:" & Request.form("s1") & "<BR>"
Response.Write "2:" & Request.form("s2") & "<BR>"
Response.Write "3:" & Request.form("s3") & "<BR>"
%>
核心代码实现
具体代码实现如下。
<!-- 三级联动菜单 开始 -->
<script language="JavaScript">
<!--
<%
'将二级数据保存到数组中
Dim count2,rsClass2,sqlClass2
Set rsClass2=Server.CreateObject("ADODB.Recordset")
sqlClass2="select * from aa"
rsClass2.Open sqlClass2,conn,1,1
%>
var subval2 = new Array();
//数组结构:一级根值,二级根值,二级显示值
<%
count2 = 0
Do While Not rsClass2.EOF
%>
subval2(<%=count2%>) = new Array('<%=rsClass2("aID")%>','<%=rsClass2("ID")%>','<%=rsClass2("Name")%>')
<%
count2 = count2 + 1
rsClass2.MoveNext
Loop
rsClass2.Close
%>
<%
'将三级数据保存到数组中
Dim count3,rsClass3,sqlClass3
Set rsClass3=Server.CreateObject("ADODB.Recordset")
sqlClass3="select * from aaa"
rsClass3.Open sqlClass3,conn,1,1
%>
var subval3 = new Array();
//数组结构:二级根值,三级根值,三级显示值
<%
count3 = 0
Do While Not rsClass3.EOF
%>
subval3(<%=count3%>) = new Array('<%=rsClass3("aaID")%>','<%=rsClass3("ID")%>','<%=rsClass3("Name")%>')
<%
count3 = count3 + 1
rsClass3.MoveNext
Loop
rsClass3.Close
%>
function changeselect1(locationid)
{
document.form1.s2.length = 0;
document.form1.s2.options[0] = new Option('==请选择类别==','');
document.form1.s3.length = 0;
document.form1.s3.options[0] = new Option('==请选择专题==','');
for (i=0; i<subval2.length; i++)
{
if (subval2[i][0] == locationid)
{document.form1.s2.options[document.form1.s2.length] = new Option(subval2[i][2],subval2[i][1]);}
}
}
function changeselect2(locationid)
{
document.form1.s3.length = 0;
document.form1.s3.options[0] = new Option('==请选择专题==','');
for (i=0; i<subval3.length; i++)
{
if (subval3[i][0] == locationid)
{document.form1.s3.options[document.form1.s3.length] = new Option(subval3[i][2],subval3[i][1]);}
}
}
//-->
</script>
<form name="form1" method="post" action="test1.asp">
三级联动:
<%
Dim count1,rsClass1,sqlClass1
Set rsClass1=Server.CreateObject("ADODB.Recordset")
sqlClass1="select * from a"
rsClass1.Open sqlClass1,conn,1,1
%>
<select name="s1" onChange="changeselect1(this.value)">
<option>==请选择频道==</option>
<%
count1 = 0
Do While Not rsClass1.EOF
Response.Write"<option value="&rsClass1("ID")&">"&rsClass1("Name")&"</option>"
count1 = count1 + 1
rsClass1.MoveNext
Loop
rsClass1.Close
%>
</select>
<select name="s2" onChange="changeselect2(this.value)">
<option>==请选择类别==</option>
</select>
<select name="s3">
<option>==请选择专题==</option>
</select>
<input type="submit" name="Submit" value="提交"></form>
<!-- 三级联动菜单 结束 -->作者最新文章
Wiki.js 2.x 升级至 3.x 的架构变化与注意事项
2026-11-03 23:39:33
基于JavaScript的前端SQL注入基础防护实现
2026-10-31 00:08:48
基于Layui与Ajax的简易菜单权限及排序实现
2026-10-23 11:00:02
