DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> 琥珀無限級分類聯動菜單AJAX版
琥珀無限級分類聯動菜單AJAX版
編輯:AJAX詳解     

我做好琥珀無限級分類聯動菜單Javascript版後,在藍色理想和CSDN上發表了一下,梅花雪兄在CSDN上提出了效率不足的問題,我也認識到了這一點,本打算項目完工後再進行完善,但一時技癢,便在網上尋找了一下資料,最後做出了此AJAX版無限級分類聯動菜單。因時間匆忙,做得比較粗糙,但已利用AJax技術,實現無限級聯動,待過一段時間再完善此版本。
希望能給大家提供一些幫助,有好的建議或bug可在此帖後回復或浏覽http://www.51AJax.com/bbs/發帖。
運行環境:MS IE 6.0 Firefox 1.0.1
下載地址:請點擊這裡
在線Demo:請點擊這裡
Bug 反饋:請點擊這裡
最後更新:2005-10-20 16:18
共有兩個文件:
文件AJax.Html代碼如下:
HTML代碼:<Html>
  <head>
    <meta http-equiv="Content-Type" content="text/Html; charset=gb2312">
    <meta content="琥珀[hopesoft],http://www.10090.com" name="author">
    <title>琥珀網 - 無限級聯動菜單[AJax版]</title>
    <style type="text/CSS">
    body, td
    {
      font-family: 宋體;
      font-size: 12px;
    }
    </style>
<script language="JavaScript">
function GetResult(str,classid)
{
/*
*--------------- GetResult(str,classid) -----------------
* GetResult(str) 
* 功能:通過XMLHTTP發送請求,返回結果.
* 參數:str,字符串,發送條件;classid,數字,菜單級別
* 實例:GetResult(document.all.userid.value,1);
*--------------- GetResult(str,classid) -----------------
*/
//定義菜單級數,菜單ID數組,菜單對應字段數組
var MenuIdArr,MenuFIEldArr,MenuClass
MenuIdArr= new Array()
MenuFIEldArr=new Array()
MenuClass=4

MenuIdArr[1]="sel1"
MenuIdArr[2]="sel2"
MenuIdArr[3]="sel3"
MenuIdArr[4]="sel4"

MenuFIEldArr[1]="name"
MenuFIEldArr[2]="name"
MenuFIEldArr[3]="name"
MenuFIEldArr[4]="name"


if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
}


var linkurl="http://www.10090.com/demo/hpmenu/AJax_server.ASP?classid="+classid+"&sel="+str+"&fieldname="+MenuFIEldArr[classid+1]
http_request.open("GET",linkurl,false);
http_request.send(null);

//服務器端處理返回的是經過escape編碼的字符串.
//在頁面顯示服務器查詢結果

var returntxt=unescape(http_request.responseText)
if(returntxt.length>0)
{document.all,AJax.innerHtml="服務器返回結果:<font color='red'>"+returntxt+"</font>   [Powered by AJax]"}
else
{document.all,AJax.innerHtml=""}

//通過XMLHTTP返回數據,開始構建Select.
BuildSel(returntxt,eval("document.all."+MenuIdArr[classid+1]))
//============更改下下級以下菜單為空==============
var kkk
for(kkk=classid+2;kkk<=MenuClass;kkk++)
    {        
    submenu=eval("document.all."+MenuIdArr[kkk])    
    submenu.length=1
    submenu.options[0].selected=true
    }
}

function BuildSel(str,sel)
{
/*
*--------------- BuildSel(str,sel) -----------------
* BuildSel(str,sel) 
* 功能:通過str構建Select.
* 參數:str,字符串,由服務端返回的.有特定結構"字符串1|,字符串2,字符串3"
*          也可為"字符串1序號|字符串1文本,字符串2序號|字符串2文本,字符串3序號|字符串3文本",如本例
* 參數:sel,要構建的Select
* 實例:BuildSel(unescape(oBao.responseText),document.all.sel2)
*--------------- BuildSel(str,sel) -----------------
*/
//先清空原來的數據.
sel.options.length=0;
var arrstr = new Array();
arrstr = str.split(",");
//開始構建新的Select.
sel.options.add(new Option( "-----請選擇-----",""));  
if(str.length>0)   
{
for(var i=0;i<arrstr.length;i++)
{
//分割字符串
var subarrstr=new Array
subarrstr=arrstr[i].split("|")
//生成下級菜單
sel.options.add(new Option(subarrstr[1],subarrstr[0])); 
}
sel.options[0].selected=true
}

}
</script>

    <form name="form1" method="post" action="">
        <table width="90%" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
          <tr bgcolor="F1F1F1">
            <td height="24" colspan="2" align="center">琥珀無限級聯動菜單-AJAX版 [HPMenu_AJax V1.0]</td>
          </tr>
          <tr bgcolor="#FFFFFF">
            <td width="12%" height="24" align="center">所 在 洲:</td>
            <td><select name="sel1" id="sel1" >
               <option value="" selected>-----請選擇-----</option>
              <option value="10">亞洲</option>
              <option value="11">歐洲</option>
            </select></td>
          </tr>
          <tr bgcolor="#FFFFFF">
            <td height="24" align="center">國  家:</td>
            <td><select name="sel2" >
               <option value="" selected>-----請選擇-----</option>
            </select></td>
          </tr>
          <tr bgcolor="#FFFFFF">
            <td height="24" align="center">城  市:</td>
            <td><select name="sel3" id="sel3" >
               <option value="" selected>-----請選擇-----</option>
            </select></td>
          </tr>
          <tr bgcolor="#FFFFFF">
            <td height="24" align="center">地  區:</td>
            <td><select name="sel4" id="sel4">
               <option value="" selected>-----請選擇-----</option>
            </select></td>
          </tr>
          <tr bgcolor="F1F1F1">
            <td height="24" colspan="2" align="center" id="AJax"> </td>
          </tr>
      </table>
       
 
        <table width="90%"  border="0" align="center" cellpadding="0" cellspacing="0">
          <tr>
            <td height="25" align="left">下載地址:<a href="http://www.10090.com/demo/hpmenu/HPMenu_AJax.rar" target="_blank">請點擊這裡</a></td>
          </tr>
          <tr>
            <td height="25" align="left">在線Demo:<a href="http://www.10090.com/demo/" target="_blank">請點擊這裡</a></td>
          </tr>
          <tr>
            <td height="25" align="left">Bug 反饋:<a href="http://www.10090.com/bbs/index.ASP?boardid=60" target="_blank">請點擊這裡</a></td>
          </tr>
          <tr>
            <td height="25" align="left">最後更新:2005-10-20 16:18</td>
          </tr>
          <tr>
            <td height="25" align="left">聯系方式:MSN:[email protected]</td>
          </tr>
          <tr>
            <td height="50" align="center">copyright(c) 2005 <a href="http://www.10090.com">Hopesoft Studio</a> </td>
          </tr>
        </table>
        <script language="Javascript">
        GetResult(document.getElementById("sel1").value,1)        
        </script>
</form>
</body>
</Html>

  [Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]
文件AJax_server.ASP代碼如下:
Html代碼:<% @Language="JavaScript" %>
<%
function OpenDB(sdbname)
{
/*
*--------------- OpenDB(sdbname) -----------------
* OpenDB(sdbname) 
* 功能:打開數據庫sdbname,返回conn對象.
* 參數:sdbname,字符串,數據庫名稱.
* 實例:var conn = OpenDB("database.mdb");
*--------------- OpenDB(sdbname) -----------------
*/
var connstr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath(sdbname);
var conn = Server.CreateObject("ADODB.Connection");
conn.Open(connstr);
return conn;
}
var oConn = OpenDB("AJax_data.mdb");
var sel = Request("sel");
var classid = Request("classid")
var fieldname = Request("fIEldname")
var arrResult = new Array();
//var sql = "select "+fIEldname+" from Demo where parentid='"+sel+"' and classid="+classid;
var sql = "select id,"+fIEldname+" from Demo where parentid='"+sel+"'";
//Response.Write("alert("+sql+")")
var rs = Server.CreateObject("ADODB.Recordset");
rs.Open(sql,oConn,1,1);
while(!rs.EOF)
{
//遍歷所有適合的數據放入arrResult數組中.
arrResult[arrResult.length] = rs(0).Value+"|"+rs(1).Value;
rs.MoveNext();
}
//escape解決了XMLHTTP。中文處理的問題.
//數組組合成字符串.由","字符串連接.
Response.Write(escape(arrResult.join(",")));
%>

  [Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]

以上兩個版本的程序,也是揉合了眾多網友的智慧,經我之手呈現出來,互聯網的初衷與精髓就在於分享,願這個小程序能給您帶來些許方便。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved