关于无限分级(ASP+数据库+JS)的实现代码
2018-09-06 12:13
代码可以优化,请根据自己需求进行优化
说明:
所先把所有分类读取存放到JS数组中(如果数据量大可能就有点麻烦)
当选择时候返回父分类ID在从数组中找出符合的分类,然后显示给用户
数据库设计(可以根据自己需求添加字段,如此分类属于什么分类等等)
字段类型说明
id自动编号记录编号
cotename文本分类名称
byid数字父分类ID(即为此表ID,根接点时值为0)
JS部分代码(命名为*.asp)
复制代码 代码如下:
<%Dimconn
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=lmonchange=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==nullthevalue==undefinedthevalue==){thevalue=0;}
//if(lmvalue==nulllmvalue==undefinedlmvalue==){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);
}
<%Conn.Close:SetConn=Nothing%>
调用页面代码
复制代码 代码如下:
<%
Dimlm
lm=request(lm)
iflm=EmpytorNotIsnumeric(lm)thenlm=0
%>
<html>
<scripttype=text/javascriptsrc=*.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)
%>