这个原来我说过了.
以下是无限级联的,只有一个表
id和pid为int型,cityname为字符型,下面数据可以保存为文本文件导入数据库,
"id","cityname","pid"
1,"贵州",0
2,"河北",0
3,"贵州1",1
4,"贵州2",1
5,"河北1",2
6,"河北2",2
7,"贵州1-1",3
8,"贵州1-2",3
9,"贵州2-1",4
10,"贵州2-2",4
11,"河北1-1",5
12,"河北1-2",5
13,"河北2-1",6
14,"河北2-2",6
15,"贵州1-1-1",7
16,"贵州1-1-2",7
17,"贵州1-1-1-1",15
18,"贵州1-1-1-2",15
19,"贵州1-1-1-1-1",17
20,"贵州1-1-1-1-2",17*****************************************************************
city.asp
*****************************************************************
<!--#include file="conn.asp"-->
<%set rs=server.createobject("adodb.recordset")
conn.open connstr%>
<form name="form1">
省份<select name="sheng" onchange="city_change(this.name,this.value)">
   <%
   sql="select * from city where pid=0"
   rs.open sql,conn,1,1
   do while not rs.eof
   %>
        <option value="<%=rs(0)%>"><%=trim(rs(1))%></option>
   <%
   rs.movenext
   loop
   %>
</select>
城市:<select name="city" onchange="city_change(this.name,this.value)">
</select>
乡:<select name="xiang" onchange="city_change(this.name,this.value)">
</select>村:<select name="chun" onchange="city_change(this.name,this.value)">
</select>
寨:
<select name="zhai" onchange="city_change(this.name,this.value)">
</select>
门号:
<select name="cardNO">
</select>
</form>
<iframe src="about:blank" width=0 height=0 name="city_url"></iframe>
<script language=javascript>function city_change(change_type,id)
 {
  if(change_type!="cardNO") //如果是最后一级则不在往下
   {window.city_url.location.href="city_send.asp?change_type="+change_type+"&id="+id;
   } 
 }
function city_dataset(change_type,city_data)
 {
 
var city_id=form1.elements;
var select_city;
var f=0;
for(k=0;k<city_id.length;k++) //清除本级以下的数据
{
 if(city_id[k].tagName=="SELECT" && f!=0) 
   {
    city_id[k].options.length=0;
   } if(city_id[k].tagName=="SELECT" && city_id[k].name==change_type)
   {
    select_city=city_id[k+1];
    f=1;
   }
}for(k=0;k<city_data.length;k++)
{
 select_city.options.length=select_city.options.length+1;
 select_city.options[select_city.options.length-1].value=city_data[k][0];
 select_city.options[select_city.options.length-1].text=city_data[k][1];
 }
 if(select_city.options.length>0)    //自动展开下级下下级数据
   {
    city_change(select_city.name,select_city.options[0].value);
   }
 
}
 city_change("sheng",form1.sheng.options[0].value);
</script><%
rs.close
conn.close
set rs=nothing
set conn=nothing
%>city_send.asp
*************************************
<!--#include file="conn.asp"-->
<%
set rs=server.createobject("adodb.recordset")
change_type=trim(request.querystring("change_type"))
id=trim(request.querystring("id"))
%><script language=javascript>
var city_data=new Array();
<%
sql="select * from city where pid="&id
'response.write sql
rs.open sql,conn,1,1
city_count=0
do while not rs.eof
%>
city_data[<%=city_count%>]=new Array("<%=rs(0)%>","<%=rs(1)%>");<%rs.movenext
city_count=city_count+1
loop
rs.close
conn.close
set rs=nothing
set conn=nothing
%>
parent.city_dataset('<%=change_type%>',city_data);
</script>