一般级联有两种做法:
1. 把所有数据一次性全部取出放到客户端的JS里去.
2. 当用户选择了前一级时再到后台数据库里查询出后一级的内容.第一种方法我写了一个简单的例子:
<!-- 数据库结构 两个字段 provinceName(省名)  cityName(城市名) -->
<!-- #include file="connection.asp" -->
<script language=javascript>
<%
dim RS
    Set RS = Server.CreateObject("ADODB.Recordset")
    RS.open "SELECT * FROM tableName ORDER BY provinceName DESC", Conn, 0, 1dim provinceName '省名
dim provinceList '记录所有的省名, 最后输出到JS里组成省名数组
dim cityList     '记录某个省的所有城市名, 最后输出到JS里组成城市名数组
dim cityIndex    'JS的city数组名与省名下拉框的索引对应
    cityIndex = 1    do while not RS.eof
        if  isEmpty(provinceName) then
            cityList = cityList & chr(34) & Trim(RS("cityName")) & chr(34) &","
            provinceName = Trim(RS("provinceName"))
        else
            if  provinceName<>Trim(RS("provinceName")) then
                provinceList = provinceList & chr(34) & provinceName & chr(34) &","
                if not isEmpty(cityList) then Response.write "var city"& cityIndex &_
                " = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
                '输出每个省所对应的城市名的列表并组成JS的数组, 数组形式参考下面的实例
                cityIndex = cityIndex + 1
                cityList = ""
            end if
            provinceName = Trim(RS("provinceName"))
            cityList = cityList & chr(34) & Trim(RS("cityName")) & chr(34) &","
            '将每个省里的所有城市名组成一串字串
        end if
        RS.movenext
    loop    if not isEmpty(cityList) then
        Response.write "var city"& cityIndex &" = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
    end if
    if not isEmpty(provinceName) then
        provinceList = provinceList & chr(34) & provinceName & chr(34) &","
        Response.write "var provinceName = ["& Left(provinceList, Len(provinceList)-1) &"];"
        '输出省名字串并组成省名的JS数组, 形式见下实例
    end if    RS.close    : Set RS=nothing
    Conn.close  : Set Conn=nothing
%>
</script><form name=form1>
<select name=province onchange="cityName(this.selectedIndex)">
  <option value="">请选择省名</option>
</select><select name=city>
  <option value="">请选择城名</option>
</select>
</form><script language=javascript>/* 若要直接看下拉框联动效果的话, 将这段被注释的代码起用, 且上面的那段ASP注释即可
var city1 = ["杭州", "宁波", "温州", "绍兴", "金华", "湖州"];
var city2 = ["南京", "苏州", "无锡", "常州", "镇江", "徐州"];
var city3 = ["合肥", "翕县", "黄山", "祁门", "休宁"];
var city4 = ["南昌", "九江", "赣州", "上饶", "新余", "景德镇"]; 
var provinceName = ["浙江", "江苏", "安徽", "江西"];
//你在ASP输出的页面里应该看到如上这般的JS数组, 能看到则表示成功
*/
function province()
{    var e = document.form1.province;
    for (var i=0; i<provinceName.length; i++)
       e.options.add(new Option(provinceName[i], provinceName[i]));
}
function cityName(n)
{
    var e = document.form1.city;
    for (var i=e.options.length; i>0; i--)  e.remove(i);
    if (n == 0) return;
    var a = eval("city"+ n); //得到城市的数组名
    for (var i=0; i<a.length; i++) e.options.add(new Option(a[i], a[i]));
}
function window.onload()
{
    province(); //初始时给省名下拉框赋内容
}
</script>

解决方案 »

  1.   

    TO: meizz(梅花雪)  
    我的表是 
    表 1: id1,name1
    表 2: id2,name2,id1
    我修改了你的程序,有报错,能看看吗???<!-- 数据库结构 两个字段 provinceName(省名)  cityName(城市名) -->
    <!-- #include file="connection.asp" -->
    <script language=javascript>
    <%dim RS
    dim RS1
        Set RS = Server.CreateObject("ADODB.Recordset")
        RS.open "SELECT * FROM provin ORDER BY id DESC", Conn, 0, 1
        
        Set RS1 = Server.CreateObject("ADODB.Recordset")
        RS1.open "SELECT * FROM city ORDER BY id DESC", Conn, 0, 1dim provinceName '省名
    dim provinceList '记录所有的省名, 最后输出到JS里组成省名数组
    dim cityList     '记录某个省的所有城市名, 最后输出到JS里组成城市名数组
    dim cityIndex    'JS的city数组名与省名下拉框的索引对应
        cityIndex = 1    do while not RS.eof
           
            if  (isEmpty(provinceName))  then
              do while not rs1.eof
                provinceName = Trim(RS("provinceName"))
                if trim(rs("id"))=trim(rs1("provinid")) then
                cityList = cityList & chr(34) & Trim(RS1("cityName")) & chr(34) &","
                end if
              RS1.movenext
              loop   
            else
                
                if  (provinceName<>Trim(RS("provinceName")))  then
                    provinceList = provinceList & chr(34) & provinceName & chr(34) &","
                    provinceName = Trim(RS("provinceName"))
                end if         
                do while not rs1.eof    
                    if (Trim(RS("id"))=Trim(RS1("provinid"))) then
                      if not isEmpty(cityList) then Response.write "var city"& cityIndex &_
                       " = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
                       '输出每个省所对应的城市名的列表并组成JS的数组, 数组形式参考下面的实例
                       cityIndex = cityIndex + 1
                       cityList = ""
                     end if
                     '
                  '
                'end if
                
                
                cityList = cityList & chr(34) & Trim(RS1("cityName")) & chr(34) &","
                '将每个省里的所有城市名组成一串字串
                RS1.movenext
                loop
                'end if
                
            end if
            
           RS.movenext
        loop    if not isEmpty(cityList) then
            Response.write "var city"& cityIndex &" = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
        end if
        if not isEmpty(provinceName) then
            provinceList = provinceList & chr(34) & provinceName & chr(34) &","
            Response.write "var provinceName = ["& Left(provinceList, Len(provinceList)-1) &"];"
            '输出省名字串并组成省名的JS数组, 形式见下实例
        end if    RS.close    : Set RS=nothing
        Conn.close  : Set Conn=nothing
       
    %>
    </script><form name=form1>
    <select name=province onchange="cityName(this.selectedIndex)">
      <option value="">请选择省名</option>
    </select><select name=city>
      <option value="">请选择城名</option>
    </select>
    </form><script language=javascript>
    function province()
    {    var e = document.form1.province;
        for (var i=0; i<provinceName.length; i++)
           e.options.add(new Option(provinceName[i], provinceName[i]));
    }
    function cityName(n)
    {
        var e = document.form1.city;
        for (var i=e.options.length; i>0; i--)  e.remove(i);
        if (n == 0) return;
        var a = eval("city"+ n); //得到城市的数组名
        for (var i=0; i<a.length; i++) e.options.add(new Option(a[i], a[i]));
    }
    function window.onload()
    {
        province(); //初始时给省名下拉框赋内容
    }
    </script>
      

  2.   

    <SCRIPT LANGUAGE="JavaScript">
    <!-- Begin
    var arrItems1 = new Array();
    var arrItemsGrp1 = new Array();arrItems1[3] = "Truck";
    arrItemsGrp1[3] = 1;
    arrItems1[4] = "Train";
    arrItemsGrp1[4] = 1;
    arrItems1[5] = "Car";
    arrItemsGrp1[5] = 1;arrItems1[6] = "Boat";
    arrItemsGrp1[6] = 2;
    arrItems1[7] = "Submarine";
    arrItemsGrp1[7] = 2;arrItems1[0] = "Planes";
    arrItemsGrp1[0] = 3;
    arrItems1[1] = "Ultralight";
    arrItemsGrp1[1] = 3;
    arrItems1[2] = "Glider";
    arrItemsGrp1[2] = 3;var arrItems2 = new Array();
    var arrItemsGrp2 = new Array();arrItems2[21] = "747";
    arrItemsGrp2[21] = 0
    arrItems2[22] = "Cessna";
    arrItemsGrp2[22] = 0arrItems2[31] = "Kolb Flyer";
    arrItemsGrp2[31] = 1
    arrItems2[34] = "Kitfox";
    arrItemsGrp2[34] = 1arrItems2[35] = "Schwietzer Glider";
    arrItemsGrp2[35] = 2arrItems2[99] = "Chevy Malibu";
    arrItemsGrp2[99] = 5
    arrItems2[100] = "Lincoln LS";
    arrItemsGrp2[100] = 5
    arrItems2[57] = "BMW Z3";
    arrItemsGrp2[57] = 5arrItems2[101] = "F-150";
    arrItemsGrp2[101] = 3
    arrItems2[102] = "Tahoe";
    arrItemsGrp2[102] = 3arrItems2[103] = "Freight Train";
    arrItemsGrp2[103] = 4
    arrItems2[104] = "Passenger Train";
    arrItemsGrp2[104] = 4arrItems2[105] = "Oil Tanker";
    arrItemsGrp2[105] = 6
    arrItems2[106] = "Fishing Boat";
    arrItemsGrp2[106] = 6arrItems2[200] = "Los Angelas Class";
    arrItemsGrp2[200] = 7
    arrItems2[201] = "Kilo Class";
    arrItemsGrp2[201] = 7
    arrItems2[203] = "Seawolf Class";
    arrItemsGrp2[203] = 7function selectChange(control, controlToPopulate, ItemArray, GroupArray)
    {
      var myEle ;
      var x ;
      // Empty the second drop down box of any choices
      for (var q=controlToPopulate.options.length;q>=0;q--) controlToPopulate.options[q]=null;
      if (control.name == "firstChoice") {
        // Empty the third drop down box of any choices
        for (var q=myChoices.thirdChoice.options.length;q>=0;q--) myChoices.thirdChoice.options[q] = null;
     }
      // ADD Default Choice - in case there are no values
      myEle = document.createElement("option") ;
      myEle.value = 0 ;
      myEle.text = "[SELECT]" ;
      controlToPopulate.add(myEle) ;
    for ( x = 0 ; x < ItemArray.length  ; x++ )
        {
          if ( GroupArray[x] == control.value )
            {
              myEle = document.createElement("option") ;
              myEle.value = x ;
              myEle.text = ItemArray[x] ;
              controlToPopulate.add(myEle) ;
            }
        }
    }
    //  End -->
    </script>
    <form name=myChoices>
    <table align="center">
    <tr>
    <td>
    <SELECT id=firstChoice name=firstChoice onchange="selectChange(this, myChoices.secondChoice, arrItems1, arrItemsGrp1);">
        <option value=0 SELECTED>[SELECT]</option>
        <option value=1>Land</option>
        <option value=2>Sea</option>
        <option value=3>Air</option>
    </SELECT>
    </TD><TD>
    <SELECT id=secondChoice name=secondChoice onchange="selectChange(this, myChoices.thirdChoice, arrItems2, arrItemsGrp2);">
    </SELECT>
    <SELECT id=thirdChoice name=thirdChoice>
    </SELECT>
    </TD>
    </TR>
    </TABLE>
    </form>
      

  3.   

    http://expert.csdn.net/Expert/topic/1939/1939963.xml?temp=.8062708
      

  4.   

    例子
    <script>
    var cities=new Array();
    cities[0]=new Array("changsha","changde","yueyang");
    cities[1]=new Array("wuhan","huangshi","yichang");
    cities[2]=new Array("guangzhou","shenzhen");
    cities[3]=new Array("nanning","liuzhou");
    function mysel()
    {
    document.all.city.options.length=0;
    for(i=0;i<document.all.province.options.length;i++)
    {
    if(document.all.province.options[i].selected)
    {
    for(j=0;j<cities[i].length;j++)
    {
    document.all.city.options.length++;
    document.all.city.options[document.all.city.options.length-1].value=cities[i][j];
    document.all.city.options[document.all.city.options.length-1].text=cities[i][j];
    }
    }
    }
    }
    </script>
    choose province: 
    <select name=province multiple onchange=mysel()>
    <option value=1>hunan
    <option value=2>hubei
    <option value=3>guangdong
    <option value=4>guangxi
    </select>
    city:
    <select name=city>
    <option value=changsha>changsha
    <option value=changde>changde
    <option value=yueyang>yueyang
    </select>