当前位置: 首页 > 图文教程 > 网络编程 > ASP > 关于无限分级(ASP+数据库+JS)的实现代码

ASP
一种比较方便的ASP分页程序
用一套论坛程序架设多个论坛
ASP与ASP.NET在COOKIE方面的区别
较长数据无法在Asp页面中取出的三种解决方法
初试WAP之wml+ASP查询
动态网站首页的静态生成方法
使用正则表达式实现模式图片新闻.ASP
让你的WAP网站有更好的兼容性
WAP版的手机号码所在地查询
asp模仿 Lotus Notes 的界面程序
ORACLE920与ASP的连接问题的解决办法
利用SQLSERVER存储过程实现ASP用户身份验证
在ASP中自动创建多级文件夹的函数(使用FSO)
利用instr()函数防止SQL注入攻击
利用XSL和ASP实现XML文档在线编辑
表单对象textarea内容的格式控制(回车、换行、空格)
针对select写了一个通用的option输出函数
ASP无组件BMP汉字生成类+汉字点阵库
时间、空间性能极优的asp无组件上传类
无组件生成BMP验证码

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 171 ::
收藏到网摘: n/a

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

<%Dim conn
Set conn=Server.CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("Cote.mdb")
conn.Open
%>
function CheckLm(thevalue){
var byid=new Array();
var cotename=new Array();
var id=new Array();
var i;
var id_s;
var byid_s;
var cotename_s;
var thevalue_r;
var data='<select name="lm" onchange="CheckLm(this.value)">'
id_s="|";
cotename_s='-选择-|';
<%set rs=server.CreateObject("adodb.recordset")
sql="select * from [DB_Cote] Order by byid,id"
rs.open sql,conn,1,1
i=0
if not rs.eof then
do while not rs.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]='无分类';")
end if
rs.close
set rs=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("|");
var length=id_v.length-1;
for(j=0;j<length;j++){
if(thevalue==id_v[j]){
data+="<option value='"+id_v[j]+"' selected>"+cotename_v[j]+"</option>";}
else{
data+="<option value='"+id_v[j]+"'>"+cotename_v[j]+"</option>";
}
}
if(thevalue!=0){data+="<option value='"+thevalue_r+"'>上级分类</option>";}
//alert(length+'/'+thevalue);
var lm=document.getElementById('lmid');
lm.innerHTML=data+"</select>";
}
<%Conn.Close:Set Conn=Nothing%>

调用页面代码
复制代码 代码如下:

<%
Dim lm
lm=request("lm")
if lm=Empyt or Not Isnumeric(lm) then lm=0
%>
<html>
<script type="text/javascript" src="*.asp"></script>
<body onLoad="CheckLm(<%=lm%>)">
<div id="lmid"></div>
</body>
</html>

运行后结果
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

数据库:


递归

复制代码 代码如下:

Sub GetA(TheID)
set rs=server.CreateObject("adodb.recordset")
dim rs,sql
sql="select * from [DB_Cote] Where ByID in("&TheID&")"
rs.open sql,conn,1,1
i=0
if not rs.eof then
do while not rs.eof
response.Write(rs("cotename")&"<br>")
call GetA(Rs("id"))
rs.movenext
i=i+1
loop
end if
rs.close
set rs=nothing
End Sub
if m=empty then m=0
call GetA(m)
%>