数据库的三级菜单实现

数据库的三级菜单实现,第1张

<SCRIPT LANGUAGE="JavaScript">

<!--

function CreateSelect(_FormName,_SName,_SValue,_Ds,_AllOptionStr,ShowType)

{

//三级关链菜单通用版

//作者:海娃, 有问题请到http://www.51windows.Net留言。

if (_FormName=="")

_FormName = "all"

var _DsArr = _Ds.split("|")

var _Ds1,_Ds2,_Ds3

var _Ds1 = _DsArr[0]

var _Ds2 = (_DsArr.length>1)?_DsArr[1]:_DsArr[0]

var _Ds3 = (_DsArr.length>2)?_DsArr[2]:_DsArr[0]

var _SNameArr = _SName.split("|")

var _SName1,_SName2,_SName3

var _SName1 = _SNameArr[0]

var _SName2 = (_SNameArr.length>1)?_SNameArr[1]:_SNameArr[0]

var _SName3 = (_SNameArr.length>2)?_SNameArr[2]:_SNameArr[0]

var _SValueArr = _SValue.split("|")

var _SValue1,_SValue2,_SValue3

var _SValue1 = _SValueArr[0]

var _SValue2 = (_SValueArr.length>1)?_SValueArr[1]:_SValueArr[0]

var _SValue3 = (_SValueArr.length>2)?_SValueArr[2]:_SValueArr[0]

if (ShowType==3){

_AllOptionStr = _AllOptionStr.replace(/\(\(/ig,"\(\("+_Ds3+"\^")

_AllOptionStr = _AllOptionStr.replace(/\{\{/ig,"\{\{"+_Ds2+"\(\("+_Ds3+"\*\*")

}

else if(ShowType==2){

_AllOptionStr = _AllOptionStr.replace(/\{\{/ig,"\{\{"+_Ds2+"\(\("+_Ds3+"\*\*")

}

else if(ShowType==1){

_AllOptionStr = _AllOptionStr.replace(/\(\(/ig,"\(\("+_Ds3+"\^")

}

var AllStr = _Ds1 + "{{"+ _Ds2 + "(("+ _Ds3 +"||"+_AllOptionStr

//alert(AllStr)

var _AR0 = AllStr.split("||")

document.writeln("<select name=\"" + _SName1 + "\" size=\"1\" onChange=\""+_SName1+"redirect(this.options.selectedIndex)\">")

for (var i1 = 0i1 <_AR0.lengthi1++)

{

var Area1Str = _AR0[i1]

var _AR10 = Area1Str.split("{{")

var _AR11 = _AR10[0].split("@")

var Tstr1 = _AR11[0]

var Vstr1 = (_AR11.length==2)?_AR11[1]:_AR11[0]

document.writeln("<option value=\""+Vstr1+"\">"+Tstr1+"<\/option>")

}

document.writeln("<\/select>")

document.writeln("<select name=\"" + _SName2 + "\" size=\"1\" onChange=\""+_SName1+"redirect1(this.options.selectedIndex)\">")

var _AR111 = _Ds2.split("@")

var Tstr11 = _AR111[0]

var Vstr11 = (_AR111.length==2)?_AR111[1]:_AR111[0]

document.writeln("<option value=\""+Vstr11+"\">"+Tstr11+"<\/option>")

document.writeln("<\/select>")

document.writeln("<select name=\"" + _SName3 + "\" size=\"1\">")

var _AR222 = _Ds3.split("@")

var Tstr22 = _AR222[0]

var Vstr22 = (_AR222.length==2)?_AR222[1]:_AR222[0]

document.writeln("<option value=\""+Vstr22+"\">"+Tstr22+"<\/option>")

document.writeln("<\/select>")

document.writeln("<S"+"CRIPT LANGUAGE=\"JavaScript\" defer>")

document.writeln("<!--")

document.writeln("var "+_SName1+"NewAllStr = \""+ AllStr +"\"")

document.writeln("var "+_SName1+"_AR0 = "+_SName1+"NewAllStr.split(\"||\")")

document.writeln("var "+_SName1+"groups=document."+ _FormName +"." + _SName1 + ".options.length")

document.writeln("var "+_SName1+"group=new Array("+_SName1+"groups)")

document.writeln("for (i=0i<"+_SName1+"groupsi++){")

document.writeln(" "+_SName1+"group[i]=new Array()")

document.writeln("}")

document.writeln("for (var i1 = 0i1 <"+_SName1+"_AR0.lengthi1++){")

document.writeln(" var Area1Str = "+_SName1+"_AR0[i1]")

document.writeln(" var _AR10 = Area1Str.split(\"{{\")")

document.writeln(" var _AR12 = _AR10[1].split(\"**\")")

document.writeln(" for (var i2 = 0i2 <_AR12.lengthi2++){")

document.writeln(" var Area2Str = _AR12[i2]")

document.writeln(" var _AR20 = Area2Str.split(\"((\")")

document.writeln(" var _AR211 = _AR20[0].split(\"@\")")

document.writeln(" var Tstr2 = _AR211[0]")

document.writeln(" var Vstr2 = (_AR211.length==2)?_AR211[1]:_AR211[0]")

document.writeln(" "+_SName1+"group[i1][i2]=new Option(Tstr2,Vstr2)")

document.writeln(" }")

document.writeln("}")

document.writeln("var "+_SName1+"temp = document."+ _FormName +"." + _SName2)

document.writeln("function "+_SName1+"redirect(x){")

document.writeln(" for (m="+_SName1+"temp.options.length-1m>0m--)")

document.writeln(" "+_SName1+"temp.options[m]=null")

document.writeln(" for (i=0i<"+_SName1+"group[x].lengthi++){")

document.writeln(" "+_SName1+"temp.options[i]=new Option("+_SName1+"group[x][i].text,"+_SName1+"group[x][i].value)")

document.writeln(" }")

document.writeln(" "+_SName1+"temp.options[0].selected=true")

document.writeln(" "+_SName1+"redirect1(0)")

document.writeln("}")

document.writeln("var "+_SName1+"Group2s=document."+ _FormName +"." + _SName2 + ".options.length")

document.writeln("var "+_SName1+"Group2=new Array("+_SName1+"groups)")

document.writeln("for (i=0i<"+_SName1+"groupsi++){")

document.writeln(" "+_SName1+"Group2[i]=new Array("+_SName1+"group[i].length)")

document.writeln(" for (j=0j<"+_SName1+"group[i].lengthj++){")

document.writeln(" "+_SName1+"Group2[i][j]=new Array()")

document.writeln(" }")

document.writeln("}")

document.writeln("for (var i1 = 0i1 <"+_SName1+"_AR0.lengthi1++){")

document.writeln(" var Area1Str = "+_SName1+"_AR0[i1]")

document.writeln(" var _AR10 = Area1Str.split(\"{{\")")

document.writeln(" var _AR12 = _AR10[1].split(\"**\")")

document.writeln(" for (var i2 = 0i2 <_AR12.lengthi2++){")

document.writeln(" var Area2Str = _AR12[i2]")

document.writeln(" var _AR20 = Area2Str.split(\"((\")")

document.writeln(" _AR212 = _AR20[1].split(\"^\")")

document.writeln(" for (var i3 = 0i3 <_AR212.lengthi3++){")

document.writeln(" Area3Str = _AR212[i3]")

document.writeln(" _AR3 = Area3Str.split(\"@\")")

document.writeln(" Tstr3 = _AR3[0]")

document.writeln(" Vstr3 = (_AR3.length==2)?_AR3[1]:_AR3[0]")

document.writeln(" "+_SName1+"Group2[i1][i2][i3]=new Option(Tstr3,Vstr3)")

document.writeln(" }")

document.writeln(" }")

document.writeln("}")

document.writeln("var "+_SName1+"temp1=document."+ _FormName +"." + _SName3 + "")

document.writeln("function "+_SName1+"redirect1(y){")

document.writeln(" for (m="+_SName1+"temp1.options.length-1m>0m--)")

document.writeln(" "+_SName1+"temp1.options[m]=null")

document.writeln(" for (i=0i<"+_SName1+"Group2[document."+ _FormName +"." + _SName1 + ".options.selectedIndex][y].lengthi++){")

document.writeln(" "+_SName1+"temp1.options[i]=new Option("+_SName1+"Group2[document."+ _FormName +"." + _SName1 + ".options.selectedIndex][y][i].text," + _SName1 + "Group2[document."+ _FormName +"." + _SName1 + ".options.selectedIndex][y][i].value)")

document.writeln(" }")

document.writeln(" "+_SName1+"temp1.options[0].selected=true")

document.writeln("}")

document.writeln("\/\/-->")

document.writeln("<\/script>")

document.writeln("<s"+"cript language=\"JavaScript\">")

document.writeln("<!--")

document.writeln("function "+_SName1+"SetValue(){")

document.writeln(" try{")

document.writeln(" if (\""+_SValue1+"\"!=\"\"){")

document.writeln(" document."+ _FormName +"."+_SName1+".value=\""+_SValue1+"\"")

document.writeln(" "+_SName1+"redirect(document."+ _FormName +"."+_SName1+".options.selectedIndex)")

document.writeln(" if (\""+_SValue2+"\"!=\"\"){")

document.writeln("document."+ _FormName +"."+_SName2+".value=\""+_SValue2+"\"")

document.writeln(""+_SName1+"redirect1(document."+ _FormName +"."+_SName2+".options.selectedIndex)")

document.writeln("if (\""+_SValue3+"\"!=\"\")")

document.writeln(" document."+ _FormName +"."+_SName3+".value=\""+_SValue3+"\"")

document.writeln(" }")

document.writeln(" }")

document.writeln(" }")

document.writeln(" catch(e){")

document.writeln(" }")

document.writeln("}")

document.writeln("window.attachEvent(\"onload\","+_SName1+"SetValue)")

document.writeln("\/\/-->")

document.writeln("<\/script>")

}

//-->

</script>

<%

set conn=Server.CreateObject("ADODB.Connection")

dbpath=Server.MapPath("db1.mdb")

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0Jet OLEDB:Database Password=Data Source=" &dbpath

dim SelectStr

SelectStr = ""

dim sql1,sql2,sql3

dim rs1,rs2,rs3

dim i1,i2,i3

'使用缓存,application("liststr"),将添加,编辑或删除一个数据时,用application("liststr") = empty清空缓存

application("liststr") = empty

if isempty(application("liststr")) then

'//一级分类开始

sql1 = "select c1id,c1name from class1"

set rs1 = conn.execute(sql1)

i1 = 0

while not rs1.eof

if i1 >0 then

SelectStr = SelectStr &"||"

end if

SelectStr = SelectStr &rs1("c1name") &"{{"

'显示与值不同时,用下面一行

'SelectStr = SelectStr &rs1("c1name") &"@"&rs1("c1id") &"{{"

'//二级分类开始

sql2 = "select c2id,c2name from class2 where c1name = '"&replace(rs1("c1name"),"'","''") &"'"

set rs2 = conn.execute(sql2)

i2 = 0

while not rs2.eof

if i2 >0 then

SelectStr = SelectStr &"**"

end if

SelectStr = SelectStr &rs2("c2name") &"(("

'显示与值不同时,用下面一行

'SelectStr = SelectStr &rs2("c2name") &"@"&rs2("c2id") &"(("

'//三级分类开始

sql3 = "select c3id,c3name from class3 where c2name = '"&replace(rs2("c2name"),"'","''") &"'"

set rs3 = conn.execute(sql3)

i3 = 0

while not rs3.eof

if i3 >0 then

SelectStr = SelectStr &"^"

end if

SelectStr = SelectStr &rs3("c3name")

'显示与值不同时,用下面一行

'SelectStr = SelectStr &rs3("c3name") &"@" &rs3("c3id")

i3 = i3 + 1

rs3.movenext

wend

rs3.close

set rs3 = nothing

'//三级分类结束

i2 = i2 + 1

rs2.movenext

wend

rs2.close

set rs2 = nothing

'//二级分类结束

i1 = i1 + 1

rs1.movenext

wend

rs1.close

set rs1 = nothing

application("liststr") = SelectStr

end if

'//一级分类结束

%>

<SCRIPT LANGUAGE="JavaScript">

<!--

var AllStr1 = "<% = application("liststr") %>"

//-->

</SCRIPT>

<FORM name="HwForm">

<HR>选择一次<br>

<SCRIPT LANGUAGE="JavaScript">

CreateSelect("","S_13|S_23|S_33","","请选择地区@|请选择省份@|请选择城市@",AllStr1,0)

</SCRIPT>

<HR>选择三次<br>

<SCRIPT LANGUAGE="JavaScript">

CreateSelect("HwForm","S_1|S_2|S_3","华北地区|山东|济宁","请选择地区@|请选择省份@|请选择城市@",AllStr1,3)

</SCRIPT>

</FORM>

可以使用递归方式来取

Sub getmenu(fid)

    m=m+1

    Set rss=server.CreateObject("adodb.recordset")

    sql="select id,departmenetName,parrentId,danweiId,idx from menuname where parentId='"&fid&"' order by id asc"

    rss.open sql,conn,1,1

    if not rss.eof then

      do while not rss.eof

      c_id=rss("id")

      c_name=rss("departmenetName")

      if m=1 then   '第一级菜单,这里为了突出显示给菜单前加空格和特殊字符,如不需要可不用判断m的值

       c_t=""

      elseif m=2 then  '第二级菜单

       c_t="&nbsp&nbsp&brvbar&sdot&sdot"

      elseif m=3 then  '第三级菜单

       c_t="&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&brvbar&sdot&sdot"

      elseif m=4 then  '第四级菜单

       c_t="&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&brvbar&sdot&sdot"

      else

       c_t=""

      end if

      response.write("<option value='"&c_id&"'>"&c_t&""&c_name&"</option>")

      call getmenu(c_id)

      m=m-1

      rss.movenext:loop

    end if

End Sub

不用m的判断可以显示无限级,每次取出往后空一行,有多少显示多少,测试只是为了在select中突出显示,所以特别判断是哪一级

静态和动态之间的相互调用,无法互通 2.实现方式1,通过动态语言获取出数据,css对其隐藏, *** 作时让CSS设为显示,即可 3.实现方式2,利用js+ajax+动态语言, *** 作比较复杂,但也可以实现

希望可以帮到你   望采纳  谢谢


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9928274.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存