http://fason.nease.net/samples/select/
上面是阿信的无限级关联菜单,
我想你可以试试,一次读取数据,之后的操作都不用读数据,速度非快。
但不适合太多的关联,那样子会在第一次读取的时候花很多时间。

解决方案 »

  1.   

    kingerq(多菜鸟) 是呀,那个效果正是我想要的,不过我的数据都是从数据库里读出来的,需要改一些什么啊
      

  2.   

    莫名其妙搞这么多分类干什么?真的有这种必要吗?
    有些BBS上那些无级分类帖子,有谁会耐着性子看的?
      

  3.   

    <?php 
    /* 
    # --------------------------------------------------------#
    # Table structure for table `catalogs`
    #CREATE TABLE `catalogs` (
      `menuid` int(11) NOT NULL auto_increment,
      `menustep` varchar(255) NOT NULL default '',
      `menuname` varchar(255) NOT NULL default '',
      KEY `menuid` (`menuid`)
    ) TYPE=MyISAM AUTO_INCREMENT=103 ;
     */
    include("conn.php");$query = "select * from catalogs order by menuid,menustep";
    $result = mysql_query($query) or die(mysql_error());
    $script = '
    <SCRIPT LANGUAGE = JavaScript>
    <!--
    //** Power by Fason(2004-3-11)
    //** Email:[email protected] dsy = new Dsy();
    ';$members = array();
    while($re = mysql_fetch_array($result)){
    $members[$re["menustep"]][] = array($re["menuname"],$re["menuid"]);
    }
    //print_r($members);
    foreach($members as $key => $val){
    $arr .= 'dsy.add("'.$key.'",[';
    $value = "";
    foreach($val as $k => $v){
    if($value != "") $value .= ",";
    $value .= '["'.$v[0].'","'.$v[1].'"]'; 
    }
    $arr .= $value."]);\n";
    }
    $script .= $arr;
    $script .= '
    var s=["s1","s2","s3","s4","s5"];
    setup(dsy,s);
    //-->
    </SCRIPT>
    ';
      

  4.   

    我也是改了一点,下面的是可以添加的到数据库的。
    你只要建立catalogs数据表就可以了。
    <?php 
    /* 
    # --------------------------------------------------------#
    # Table structure for table `catalogs`
    #CREATE TABLE `catalogs` (
      `menuid` int(11) NOT NULL auto_increment,
      `menustep` varchar(255) NOT NULL default '',
      `menuname` varchar(255) NOT NULL default '',
      KEY `menuid` (`menuid`)
    ) TYPE=MyISAM AUTO_INCREMENT=103 ;
     */
    include("conn.php");if($_POST["menuname"] != ""){
    $query = "insert into catalogs(menustep,menuname)values('".$_POST["menustep"]."','".$_POST["menuname"]."');";
    $result = mysql_query($query);
    if($result){
    echo "<script>alert('Insert Success')</script>";
    }
    }?>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head><body>
    <hr>
    多级关联菜单:
    <form name="form1" method="post" action="">
    <select id="s1" name="s111" onChange="change(0,1)"></select> 
    <select id="s2" name="s211" onChange="change(0,2)"></select> 
    <select id="s3" name="s311" onChange="change(0,3)"></select> 
    <select id="s4" name="s411"></select>
    <input name="temp" type="hidden" id="temp">
      <br>
      Menu Step
      <input name="menustep" type="text" id="menustep">
      <br>
      Menu Name
      <input name="menuname" type="text" id="menuname" maxlength="255">
      <input type="submit" name="Submit" value="提交">
    </form>
    <script language="JavaScript" src="xselect.js"></script>
    <?php 
    $query = "select * from catalogs order by menuid,menustep";
    $result = mysql_query($query) or die(mysql_error());
    $script = '
    <SCRIPT LANGUAGE = JavaScript>
    <!--
    //** Power by Fason(2004-3-11)
    //** Email:[email protected] dsy = new Dsy();
    ';$members = array();
    while($re = mysql_fetch_array($result)){
    $members[$re["menustep"]][] = array($re["menuname"],$re["menuid"]);
    }
    //print_r($members);
    foreach($members as $key => $val){
    $arr .= 'dsy.add("'.$key.'",[';
    $value = "";
    foreach($val as $k => $v){
    if($value != "") $value .= ",";
    $value .= '["'.$v[0].'","'.$v[1].'"]'; 
    }
    $arr .= $value."]);\n";
    }
    $script .= $arr;
    $script .= '
    var s=["s1","s2","s3","s4"];
    setup(dsy,s);
    //-->
    </SCRIPT>
    ';
    echo $script;
    mysql_free_result($result);
    ?>
    <script>
    window.onload=function() {
    var val = Array("1","3","6","9");
    for(var i = 1; i <= val.length; i++){
    var s = "s" + i;
    var d = eval("document.all."+s);
    d.value = val[i-1];
    if(i != val.length) d.onchange();
    }
    }
    </script>
    </body>
    </html>xselect.js
    ============
    //**Power By Fason
    //**Email : [email protected]
    function Dsy()
    {
    this.Items = {};
    }
    Dsy.prototype.add = function(id,iArray)
    {
    this.Items[id] = iArray;
    }
    Dsy.prototype.Exists = function(id)
    {
    if(typeof(this.Items[id]) == "undefined") return false;
    return true;
    }function change(c,v){
    var str="0";
    var dsy = window.select[c].dsy;
    var s = window.select[c].Sel;
    for(i=0;i<v;i++){ str+=("_"+document.getElementById(s[i]).selectedIndex);};
    //alert(str);
    document.all.temp.value += str+"|";
    var ss=document.getElementById(s[v]);
    with(ss){
    length = 0;
    if(dsy.Exists(str)){
    var ar = dsy.Items[str];
    for(i=0;i<ar.length;i++) {
    var ot = ar[i][0];var ov = ar[i][1] ? ar[i][1] : ot;
    options[length]=new Option(ot,ov);
    }
    options[length]=new Option("","");
    options[length-1].selected = true;
    }
    else { options[0]=new Option("","");}
    if(++v<s.length){change(c,v);}
    else {
    document.all.menustep.value = document.all.temp.value.split("|")[0];
    document.all.temp.value = "";
    }
    }

    }function setup(iDsy,iS)
    {
    if(!window.select)
    { window.select = new Array();};
    var counter = window.select.length;
    window.select[counter] = { dsy: iDsy, Sel: iS };
    //for(i=0;i<iS.length-1;i++)
    //document.getElementById(iS[i]).onchange=new Function("change("+counter+","+(i+1)+")");
    //change(counter,(i+1));
    change(counter,0);
    }
      

  5.   


    这个更多的是 Browser 端的问题
    可以看看 javascript 版用php嘛
    那你每换一级都得再刷新一下数据