ASP自动生成级联菜单(乱)

本文介绍了一种在Windows 2003环境下使用ASP.NET与JavaScript实现多级下拉菜单联动的方法。该方法通过ASP.NET获取数据库中的选项,并使用JavaScript进行前端处理,使父级菜单选择变化时子级菜单能够实时更新。此方案适用于需要动态生成菜单的Web应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

windows2003通过测试

 

<script language="javascript">
// 实例化下拉列表,所对应的数组即为arr_列表名
function InitParent(selectName)
{
    var sParent
=document.all(selectName);
    var selectArray
=new Array();
    selectArray
=eval("arr_"+selectName);    
    sParent.length
=0;
    
//alert(selectArray.length);
    
for(var i=0;i<selectArray.length;i++)
    {
        sParent.options[sParent.length]
=new Option(selectArray[i][1],selectArray[i][0]);
    }
}
//父级下拉菜单跟子级下拉菜单如何关联
function matchParentChild(pValue,cValue)
{
    
if(pValue==cValue || pValue=="")
    {
        return 
true;
    }
    return 
false;
}
//改变父级菜单时子级菜单所对应的操作
function ChangeParent(pName,cName)
{
    var sChild
=document.all(cName);
    var sParent
=document.all(pName);
    var cArray
=eval("arr_"+cName);
    sChild.length
=0;
    
for(var i=0;i<cArray.length;i++)
    {
        
if(matchParentChild(sParent.value,cArray[i][2]))
        {
            sChild.options[sChild.length]
=new Option(cArray[i][1],cArray[i][0]);
        }
    }
}

</script>
<%
set conn=server.CreateObject("adodb.connection")
connstr
="driver={Sql server}; server=server3000zhongzhao; database=cnnc;uid=sa;pwd=sa;"
conn.open connstr
'定义第一个级别,测试数据
dim sqlm(1)
sqlm(
1)=" select ltrim(i_id) as i_id,i_centername,'' as pid from dept  where i_level=1"
sqlm(
0)="select ltrim(c_id) as c_id,c_name,c_dept from member where c_level=1" 
call getJsArray(sqlm,"username")

'定义第二个级别,测试数据
dim sqln(1)
sqln(
1)="select left(a_id,2) as a_id,a_name,'' as pid from area where a_level=2"
sqln(
0)="select a_id,a_name,left(a_id,2) as pid from area where a_level=3"
call getJsArray(sqln,"area")


'根据sql自动生成javascript arr,注意,sql语句中的列要全部为字符格式,如果是零,则忽略
Sub getJsArray(byval sql, byval arrName)
    li_max 
= UBound(sql)
   
    
If li_max>= 1 Then
        
For j = li_max To 1
            
'生成下拉框
            Set rs = server.CreateObject("Adodb.RecordSet")
            
'Response.write sql(j)
            Response.Write("<select name=""" & arrName & j & """ id=""" & arrName & j             & """")
            
if j=1 then '生成onchange事件
            Response.write(" onchange=""ChangeParent('" & arrName & j & "','" & arrName & "')"" ")
            
else
            Response.write(
" onchange=""ChangeParent('" & arrName & j & """,""" & arrName & (j-1& """)"" ")
            
end if
            Response.write(
"></select>")
            
'response.write sql(j)
            rs.Open sql(j), conn, 11

            
'生成的数组
            Response.write("<script language=""javascript"">")
            Response.Write(
"var arr_" & arrName & j & "=new Array();"'定义数据
            'Response.write("" & arrName & ".length=0;")
            i = 0
            
Do While Not rs.EOF
                Response.Write(
"arr_" & arrName & j & "[" & i & "]=new Array(""" & rs(0& """,""" & rs(1& """,""" & rs(2& """);")
                
'Response.write(arrName & ".options[" & i & "]=new Option(""" & rs(1) & """,""" & rs(0) & """);")
                i = i + 1
                rs.movenext()
            
Loop
            Response.write(
"InitParent('" & arrName & j & "');"
            Response.write(
"</script>")
            rs.Close(): 
Set rs = Nothing
        
Next
        
'Response.write("<script language=""javascript"">")
        
        
'response.write(</'script>)
    End If
    
'生成下拉框
    
    
'Response.write sql(0)
    Response.Write("<select name=""" & arrName & """ id=""" & arrName & """></select>")
    
    
Set rs = server.CreateObject("Adodb.RecordSet")
    rs.Open sql(
0), conn, 11    
    Response.write(
"<script language=""javascript"">")
    
'生成的数组
    Response.Write("var arr_" & arrName & "=new Array();"'定义数据
    'Response.write("" & arrName & ".length=0;")
    i = 0
    
Do While Not rs.EOF
        Response.Write(
"arr_" & arrName & "[" & i & "]=new Array(""" & rs(0& """,""" & rs(1& """,""" & rs(2& """);")
        
'Response.write(arrName & ".options[" & i & "]=new Option(""" & rs(1) & """,""" & rs(0) & """);")
        i = i + 1
        rs.movenext()
    
Loop
    

    Response.write(
"InitParent(""" & arrName & """);")
    Response.write(
"</script>"
    rs.Close(): 
Set rs = Nothing
    
End Sub
conn.close():
set conn=nothing
%
>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值