index.asp
<html>
<head>
<title></title>
<meta content="text/html; charset=gb2312" http-equiv="content-type">
<style type="text/css"><!–
font{font-size:12px}
td{font-size:12px}
a{color:#333399}
a:hover{color:#ff6600}
–></style>
<script language="javascript" type="text/javascript"><!–
function funonload(){
document.all.list_file.src="jscript_city.asp?base=0&sele=0-&elem=select01";
}
//pbase级数,以0基,
//psele是<option 的value值
//pele是下一级的表单名字
function chgselect(pbase,psele,pelem){
//当改变了一个列表之后。清除以后的列表的值。
for(i=parseint(pelem.replace("select",""));i<=5;i++){
var tmp="000"+i;
var pelem1=eval("document.form1.select"+tmp.substr(tmp.length-2));
pelem1.length=1;
pelem1.selectedindex=0;
}
//js用asp得到数据库的数据来更新下级列表
document.all.list_file.src="jscript_city.asp?base="+pbase+"&sele="+psele+"&elem="+pelem;
}
//–></script>
<script id="list_file" language="javascript" type="text/javascript" src=""></script>
</head>
<body bgcolor="#ffffff" leftmargin="0" topmargin="2" text="#333333" onload="funonload();">
<form name="form1">
<select name="select01" onchange="chgselect(1,this.options[this.selectedindex].value,select02)">
<option value="">省…</option>
</select>
<select name="select02" onchange="chgselect(2,this.options[this.selectedindex].value,select03)">
<option value="">市…</option>
</select>
<select name="select03" onchange="chgselect(3,this.options[this.selectedindex].value,select04)">
<option value="">县…</option>
</select>
<select name="select04" onchange="chgselect(4,this.options[this.selectedindex].value,select05)">
<option value="">乡…</option>
</select>
<select name="select05">
<option value="">村…</option>
</select>
</form>
</body></html>
jscript_city.asp
<%
varbase 下拉菜单等级
varsele 所选择下拉菜单项的数据库id
varelem 下一级的表单名称
varbase=request.querystring("base")
varsele=left(request.querystring("sele"),instr(request.querystring("sele"),"-")-1)
varelem=request.querystring("elem")
vardistname=""
varautoid=""
set condb=server.createobject("adodb.connection")
condb.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("db1.mdb")
sqlcommand="select * from table1 where filed1="&varbase&" and filed2="&varsele
set rsrecord=condb.execute(sqlcommand)
while not rsrecord.eof
vardistname=vardistname&chr(34)&rsrecord("filed3")&chr(34)
varautoid=varautoid&chr(34)&rsrecord("id")&chr(34)
rsrecord.movenext
if not rsrecord.eof then
vardistname=vardistname&","
varautoid=varautoid&","
end if
wend
response.write("var vardistname=new array("&vardistname&")"&vbcrlf)
response.write("var varautoid=new array("&varautoid&")"&vbcrlf)
response.write("var varelem=eval("&chr(34)&"document.form1."&varelem&chr(34)&")"&vbcrlf)
response.write("varelem.length=vardistname.length+1;"&vbcrlf)
response.write("for(var i=0;i<vardistname.length;i++){"&vbcrlf)
response.write(" varelem.options[i+1].text=vardistname[i];"&vbcrlf)
response.write(" varelem.options[i+1].value=varautoid[i]+-+vardistname[i];"&vbcrlf)
response.write("}"&vbcrlf)
response.write("varelem.selectedindex=0;"&vbcrlf)
%>
db1.mdb
————————————————-
福建 厦门 思明 黄厝 曾厝桉村
福建 泉州 丰泽 西湖 水头村
如上面的五级转成数据库为:
——————————-
id filed1 filed2 filed3
1 0 0 福建
2 1 1 厦门
3 1 1 泉州
4 2 2 思明
5 3 4 黄厝
6 4 5 曾厝桉村
7 2 3 丰泽
8 3 7 西湖
9 4 8 水头村
————————————————-
数据库说明:
id 自动编号
filed1 下拉菜单列表的等级(看级数。可以设置它的精度。是数字类型)
filed2 上一级的id号(用长整型吧)
filed3 这个就不用说了吧(文件。长度自己看情况)
本程序在iis4+win2000p+access2000下通过。