服务器之家

服务器之家 > 正文

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

时间:2019-10-14 11:31     来源/作者:asp代码网

代码可以优化,请根据自己需求进行优化  
说明: 
所先把所有分类读取存放到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>


运行后结果  

数据库:

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

递归 

复制代码代码如下:


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) 
%> 

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字 2019-06-05
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
返回顶部