关于无限分级(ASP+数据库+JS)的实现代码

时间:2021-05-25

代码可以优化,请根据自己需求进行优化
说明:
所先把所有分类读取存放到JS数组中(如果数据量大可能就有点麻烦)
当选择时候返回父分类ID在从数组中找出符合的分类,然后显示给用户
数据库设计(可以根据自己需求添加字段,如此分类属于什么分类等等)
字段类型说明
id自动编号记录编号
cotename文本分类名称
byid数字父分类ID(即为此表ID,根接点时值为0)

JS部分代码(命名为*.asp)
复制代码 代码如下:
<%Dimconn
Setconn=Server.CreateObject("ADODB.Connection")
conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
"DataSource="&Server.MapPath("Cote.mdb")
conn.Open
%>

functionCheckLm(thevalue){
varbyid=newArray();
varcotename=newArray();
varid=newArray();
vari;
varid_s;
varbyid_s;
varcotename_s;
varthevalue_r;
vardata='<selectname="lm"onchange="CheckLm(this.value)">'
id_s="|";
cotename_s='-选择-|';
<%setrs=server.CreateObject("adodb.recordset")
sql="select*from[DB_Cote]Orderbybyid,id"
rs.opensql,conn,1,1
i=0
ifnotrs.eofthen
dowhilenotrs.eof
response.Write("id["&i&"]="&rs("id")&";"&chr(10))
response.Write("byid["&i&"]="&rs("byid")&";"&chr(10))
response.Write("cotename["&i&"]='"&rs("cotename")&"';"&chr(10))
rs.movenext
i=i+1
loop
else
response.Write("id[0]=0;byid[0]=0;cotename[0]='无分类';")
endif
rs.close
setrs=nothing%>
if(thevalue==null||thevalue==undefined||thevalue==''){thevalue=0;}
//if(lmvalue==null||lmvalue==undefined||lmvalue==''){lmvalue=0;}
for(k=0;k<id.length;k++){
if(thevalue==id[k]){id_s+=thevalue+"|";cotename_s+=cotename[k]+"|";thevalue_r=byid[k];break;}else{thevalue_r=0;}
}
for(i=0;i<id.length;i++){
if(thevalue==byid[i]){
id_s+=id[i]+"|";cotename_s+=cotename[i]+"|";
}
}
if(id_s=='-1|'){
for(i=0;i<id.length;i++){
if(thevalue==id[i]){
id_s+=id[i]+"|";cotename_s+=cotename[i]+"|";
}
}
}
id_v=id_s.split("|");
cotename_v=cotename_s.split("|");
varlength=id_v.length-1;
for(j=0;j<length;j++){
if(thevalue==id_v[j]){
data+="<optionvalue='"+id_v[j]+"'selected>"+cotename_v[j]+"</option>";}
else{
data+="<optionvalue='"+id_v[j]+"'>"+cotename_v[j]+"</option>";
}
}
if(thevalue!=0){data+="<optionvalue='"+thevalue_r+"'>上级分类</option>";}
//alert(length+'/'+thevalue);
varlm=document.getElementById('lmid');
lm.innerHTML=data+"</select>";
}
<%Conn.Close:SetConn=Nothing%>

调用页面代码
复制代码 代码如下:
<%
Dimlm
lm=request("lm")
iflm=EmpytorNotIsnumeric(lm)thenlm=0
%>
<html>
<scripttype="text/javascript"src="*.asp"></script>
<bodyonLoad="CheckLm(<%=lm%>)">
<divid="lmid"></div>
</body>
</html>

运行后结果
[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
数据库:



递归
复制代码 代码如下:
SubGetA(TheID)

setrs=server.CreateObject("adodb.recordset")
dimrs,sql
sql="select*from[DB_Cote]WhereByIDin("&TheID&")"
rs.opensql,conn,1,1
i=0
ifnotrs.eofthen
dowhilenotrs.eof
response.Write(rs("cotename")&"<br>")
callGetA(Rs("id"))
rs.movenext
i=i+1
loop
endif
rs.close
setrs=nothing

EndSub

ifm=emptythenm=0
callGetA(m)
%>

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章