表中有三个字段,格式大概如下:
A              B                C
河北           石家庄           XX县
河北           石家庄           XX县2
河北           保定             XX县
河南           新乡             XX县
河南           新乡             XX县2请教各位高手如何做出三级联动菜单?

解决方案 »

  1.   

    要用到ajax(最好),当点击河北的时候将河北传给php,php组成sql将A="河北"的查出来,将结果返回给ajax,ajax内循环将市输出,当点击某个市的时候,通过ajax将市传给php,php组成sql查询$="某个市"的查出来,以此类推
      

  2.   

    能给出详细代码吗?我在网上找到了三级联动的东西。他用是ID号,可我将第一级显示的内容及VALUE改为汉字后(A的内容)后,第二级根本就不动了
      

  3.   

    <script language="JavaScript">
    <!--
    var subcat = new Array();
    <?
    $i=0;
    $sql="select * from sanji ";
    $query=mysql_query($sql,$link);
    while($arr=mysql_fetch_array($query))
    {
    echo "subcat[".$i++."] = new Array('".$arr["A"]."','".$arr["B"]."','".$arr["C"]."');\n";
    }
    ?>
    var subcat2 = new Array();
    <?
    $i=0;
    $sql="select * from sanji ";
    $query=mysql_query($sql,$link);
    while($arr=mysql_fetch_array($query))
    {
    echo "subcat2[".$i++."] = new Array('".$arr["A"]."','".$arr["B"]."','".$arr["C"]."');\n";
    }
    ?>
    function changeselect1(locationid)
    {
    document.form1.s2.length = 0;
    document.form1.s2.options[0] = new Option('==请选择==','');
    for (i=0; i<subcat.length; i++)
    {
    if (subcat[i][0] == locationid)
    {document.form1.s2.options[document.form1.s2.length] = new Option(subcat[i][2], subcat[i][2]);}
    }
    }
    function changeselect2(locationid)
    {
    document.form1.s3.length = 0;
    document.form1.s3.options[0] = new Option('==请选择==','');
    for (i=0; i<subcat2.length; i++)
    {
    if (subcat2[i][1] == locationid)
    {document.form1.s3.options[document.form1.s3.length] = new Option(subcat2[i][3], subcat2[i][3]);}
    }
    }
    //-->
    </script>
    三级联动:<BR>
    <form name="form1">
    <select name="s1" onChange="changeselect1(this.value)">
    <option>==请选择==</option>
    <?
    $sql="select distinct A from sanji";
    $query=mysql_query($sql,$link);
    while($arr=mysql_fetch_array($query))
    {
    echo "<option value=".$arr["A"].">".$arr["A"]."</option>\n";
    }
    ?>
    </select>
    <select name="s2" onChange="changeselect2(this.value)">
    <option>==请选择==</option>
    </select>
    <select name="s3" onChange="alert('选选择'+this.value)">
    <option>==请选择==</option>
    </select>
    </form>
    <BR>
    </body>
    </html>
      

  4.   

    if (subcat[i][0] == locationid)这句应该是判断数组中的数据是否与当前选择的数据一致的吧
    主要是我的数据库的格式是上面所显示的哪样的
    还有我改了找下一级的规则,但是在点选第一级后,第二级应该会变的吧,就算它找不到第二级的东西,可现在点选第一级后,第二级一点也不变,就好像是<select name="s1" onChange="changeselect1(this.value)">中的onChange没有起作用一样
      

  5.   

    只需要输出subcat一个JS数组就可以了。整个代码的逻辑并没有问题。
    但这个JS代码就有问题了,不兼容。JS里:
    for (i=0; i<subcat.length; i++)
    相对于
    var subcat_len=subcat.length;
    for (i=0; i<subcat_len; i++)
    的执行效率,在数据叫多的时候,尤其慢