ASP+JavaScript+数据库 级联下拉菜单

<!--
***********************************
ASP+JavaScript+数据库 级联下拉菜单
***********************************
以前都用JS的多级级联下拉菜单,但那个有局限性,每次更新列表项内容时都必须修改程序,
今天有空,写了这个数据库形式的,易于管理和修改,且你可以在此思路上建立更多级的级联菜单。
好了,废话少说,言归正传。
测试数据库:test.mdb 你可以自己建一个。
-----------------------------------------------------------------------------
表名: 字段1 字段2 字段3
-----------------------------------------------------------------------------
表1: big_class big_class_id big_class_name
表2: small_class small_class_id small_class_name belongto_big_class
数据类型 自动编号 文本 数字
-----------------------------------------------------------------------------
以下是程序清单,共1个文件,文件名:test.asp
-->
<%
'option explicit
dim conn,connstr,db
db="test.mdb" '测试数据库
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
conn.Open connstr
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>ASP+JavaScript+数据库 级联下拉菜单</title>
<style>
table{border: #00215a 1px dashed;}
td{font-size:12px;}
input,select{
font-size:9pt;
border-style:solid;
border-width:1;
cursor:default;
color:#03326B;
background-color:#FFFFFF;
height:16px;
}
a:link,a:visited{color: #000000;text-decoration: none;}
a:hover {color: #ff0000;text-decoration: none;FILTER: glow(color=ffffff,strength=0) shadow(color=aaaaaa,direction:135); POSITION: relative; WIDTH: 100%;}
</style>
<script language="JavaScript">
function addbig(){
document.all.a.style.display="block";
document.all.b.style.display="none";
document.all.c.style.display="none";
}
function addsmall(){
document.all.b.style.display="block";
document.all.a.style.display="none";
document.all.c.style.display="none";
}
function viewmenu(){
document.all.a.style.display="none";
document.all.b.style.display="none";
document.all.c.style.display="block";
}
</script>
<%
'从小类表中取出数据
set rs=server.CreateObject("adodb.recordset")
sql="select * from small_class "
rs.open sql,conn,1,1
%>
<script language="JavaScript">
var num;
//定义数组
var calArray=new Array();
<%
dim j
j=0
do while not rs.eof
%>
//将小类表中的所有相关记录存到数组calArray的对应元素中。
calArray[<%=j%>]=new Array("<%=rs("small_class_id")%>","<%=rs("small_class_name")%>","<%=rs("belongto_big_class")%>");
<%
j=j+1
rs.movenext
loop
rs.close
set rs=nothing
%>
//给num赋值为记录总数
num=<%=j%>
function givevalue(myvalue){
/*当选择大类列表的值不为空时首先清空小类下拉列表的所有项目。不然小类列表中的项目会叠加的。
同时也是初始化 options 的值为0 */
document.form3.small_class_select.length = 0;
//循环写出请求的大类所对应的小类。
for (i=0;i < num; i++)
{
if (calArray[i][2] == myvalue)
{
document.form3.small_class_select.options[document.form3.small_class_select.length] = new Option(calArray[i][1], calArray[i][0],"","");
/*定义新的Option对象并赋值。options的索引值从0开始。new Option对象有4个属性,对应分别是:文本串、value、defaultSelect、selected。在这里只用了第一个和第二个。*/
}
}
}
</script>
<script language="JavaScript">
function chk1(){
if (form1.big_class_name.value=="")
{
alert("请输入大类名称!");
form1.big_class_name.focus();
return false;
}
}
function chk2(){
if (form2.small_class_name.value=="")
{
alert("请输入小类名称!");
form2.small_class_name.focus();
return false;
}
}

</script>
</head>

<body background="background.jpg">
<%
dim rs,sql,noclass
select case request("action")
case "addbigclass"
addbigclass
case "addsmallclass"
addsmallclass
end select
%>
<div align="center"></div>
<table width="60%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr valign="middle">
<td height="48" colspan="3">
<div align="center"><font color="#999900"><b><font color="#FF0000">ASP</font>+<font color="#FF0000">JavaScript</font>+<font color="#FF0000">数据库</font>
级联下拉菜单</b></font></div></td>
</tr>
<tr>
<td width="22%" height="21" valign="bottom"><a href="#" onClick="addbig()">添加大类</a>
</td>
<td width="22%" valign="bottom"><a href="#" onClick="addsmall()">添加小类</a></td>
<td width="56%" valign="bottom"><a href="#" onClick="viewmenu()">预览效果</a></td>
</tr>
<tr>
<td height="33" colspan="3" valign="top">
<hr align="left" width="60%" size="1" color="#999900">
</td>
</tr>
<tr>
<td colspan="3" valign="top"> <div id="a" style="display:none">
<form name="form1" method="post" action="?action=addbigclass" onSubmit="return chk1()">
大类名称:
<input name="big_class_name" type="text" id="big_class_name" size="16">
<input type="submit" name="Submit" value=" 添 加 ">
</form>
</div>
<div id="b" style="display:none">
<form name="form2" method="post" action="?action=addsmallclass" onSubmit="return chk2()">
选择大类后添加小类:
<select name="addselect">
<%
set rs=server.CreateObject("adodb.recordset")
sql="big_class"
rs.open sql,conn,1,1
if rs.eof or rs.bof then
%>
<option selected>还没有添加大类</option>
<%
else
do while not rs.eof
%>
<option value="<%=rs("big_class_id")%>"><%=trim(rs("big_class_name"))%></option>
<%
rs.movenext
loop
end if
rs.close
set rs=nothing
%>
</select>
小类名称:
<input name="small_class_name" type="text" id="small_class_name" size="16">
<input type="submit" name="Submit2" value=" 添 加 ">
</form>
</div>
<div id="c" style="display:block">
<form name="form3" method="post" action="">
<select name="big_class_select" onChange="givevalue(document.form3.big_class_select.options[document.form3.big_class_select.selectedIndex].value)">
<%
dim firstid
set rs=server.CreateObject("adodb.recordset")
sql="select * from big_class order by big_class_id"
rs.open sql,conn,1,1
if rs.eof or rs.bof then
noclass=1
%>
<option selected>还没有添加大类</option>
<%
else
rs.movefirst
firstid=rs("big_class_id")
'在没有选择大类(页面刚载入)时要载入的大类。
%>
<option value="<%=rs("big_class_id")%>" selected><%=trim(rs("big_class_name"))%></option>
<%
rs.movenext
do while not rs.eof
%>
<option value="<%=rs("big_class_id")%>"><%=trim(rs("big_class_name"))%></option>
<%
rs.movenext
loop
end if
rs.close
set rs=nothing
%>
</select>
<select name="small_class_select">
<%if noclass=1 then%>
<option value="" selected>没有小类</option>
<%
else
'在没有选择大类(页面刚载入)时要载入的小类,要跟默认的大类对应。
set rs=server.CreateObject("adodb.recordset")
sql="select * from small_class where belongto_big_class="&firstid
rs.open sql,conn,1,1
if rs.eof or rs.bof then
%>
<option value="" selected>没有小类</option>
<%
else
do while not rs.eof
%>
<option value="<%=rs("small_class_id")%>"><%=trim(rs("small_class_name"))%></option>
<%
rs.movenext
loop
end if
rs.close
set rs=nothing
end if
%>
</select>
</form>
</div></td>
</tr>
</table>
<%
sub addbigclass()
set rs=server.CreateObject("adodb.recordset")
sql="select * from big_class where big_class_name='"&trim(request("big_class_name"))&"'"
rs.open sql,conn,1,3
if not(rs.eof and rs.bof) then
response.Write("<script>alert('该大类已经存在!');</script>")
else
rs.addnew
rs("big_class_name")=trim(request("big_class_name"))
rs.update
response.Write("<script>alert('大类添加成功!');self.location='test.asp?action=viewmenu';</script>")
end if
rs.close
set rs=nothing
end sub
sub addsmallclass()
set rs=server.CreateObject("adodb.recordset")
sql="select * from small_class where small_class_name='"&trim(request("small_class_name"))&"' and belongto_big_class="&request("addselect")
rs.open sql,conn,1,3
if not(rs.eof and rs.bof) then
response.Write("<script>alert('该小类已经存在!');</script>")
else
rs.addnew
rs("belongto_big_class")=request("addselect")
rs("small_class_name")=trim(request("small_class_name"))
rs.update
response.Write("<script>alert('小类添加成功!');self.location='test.asp?action=viewmenu';</script>")
end if
rs.close
set rs=nothing
end sub
conn.close
set conn=nothing
%>
<table width="60%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="48%"> <div align="right">Copyright © </div></td>
<td width="1%"></td>
<td width="11%"><b><a href="http://cooleasy.xicp.net/">酷易在线</a></b> </td>
<td width="40%"><a href="mailto:xljxlj279@126.com">联系站长</a></td>
</tr>
</table>
</body>
</html>

**********************************************************************************************************************

从数据库读出数据生成关联下拉菜单!
<table width="74" border="0" cellpadding="1" cellspacing="0">
<tr>
<td width="37"><select name="ClassName" id="ClassName" onChange="opensubselect(document.all.SubClass,document.all.ClassName.value)">
<!-- <SELECT NAME="ClassName" ID="ClassName" onChange="OpenSubClass(this.name,this.value)"> -->
</select></td>
<td width="37"><select name="SubClass" id="SubClass">
</select></td>
</tr>
<script language="JAVASCRIPT" type="TEXT/JAVASCRIPT">
var SubClass=[],SubClassID=[];
<%
Dim Rs_Class,Rs_SubClass,SqlStr,i,j,SubClassStr,SubClassID
Set Rs_Class=Server.CreateObject("ADODB.RecordSet")
Set Rs_SubClass=Server.CreateObject("ADODB.RecordSet")
SqlStr="Select * From [p_softClass]"
Rs_Class.open SqlStr,ConnStr,1,1
For i=1 to Rs_Class.RecordCount
Response.Write "document.all.ClassName.add(new Option('" & Rs_Class("name") & "'," & i &"));" & chr(13)
SqlStr="SELECT * FROM [p_soft_SubClass] WHERE ([pid]=" & Rs_Class("id") & ")"
Rs_SubClass.open SqlStr,ConnStr,1,1
SubClassStr=""
SubClassID=""
For j=1 To Rs_SubClass.RecordCount
SubClassStr=SubClassStr & "'" & Rs_SubClass("name") & "',"
SubClassID=SubClassID & Rs_SubClass("ID") & ","
Rs_SubClass.MoveNext
Next
If len(SubClassStr)>0 Then
Response.Write "SubClass[" & i & "]=new Array(" & Left(SubClassStr,Len(SubClassStr)-1) & ");" & chr(13)
Response.Write "SubClassID[" & i & "]=new Array(" & Left(SubClassID,Len(SubClassID)-1) & ");" & Chr(13)
Else
Response.Write "SubClass[" & i & "]=new Array();" & chr(13)
End If
Rs_SubClass.close
Rs_Class.MoveNext
Next
Rs_Class.close
Set Rs_SubClass=nothing
Set Rs_Class=nothing
%>
function opensubselect(obj,id)
{
var i=SubClass[id].length;
obj.options.length=0;
// obj.add(new Option(SubClass[0]));
for(var h=0;h<i;++h)
{
obj.add(new Option(SubClass[id][h],SubClassID[id][h]));
}
}
opensubselect(document.all.SubClass,document.all.ClassName.value);
</script>
</table>

*************************************************************************************************************************
  
  '联社 信用社二级联动

  Sub LianDong2Ji()
  dim rsel,count,lastm <!--DVNEWS_AD_BEGIN-->
  set rsel=server.createobject("adodb.recordset")
  %>
  <script language = "JavaScript">
  
  <!--联社、信用社二级联动-->
  var onecount1;
  onecount1=0;
  rootcat = new Array();
  <%
  count = 1
  lastm = ""
  %>
  rootcat[0] = new Array("0","请选择县级联社","0");
  <%
  rsel.open "Select XjlsMC,XjlsDH From XJLS Order By XjlsDH",MyConn,1,1
  
  do while Not rsel.eof
  %>
  rootcat[<%=count%>] = new Array("0","<%= trim(rsel(0))%>","<%= trim(rsel(1))%>");
  <%
  count = count + 1
  rsel.movenext
  loop
  rsel.close
  %>
  onecount1=<%=count%>;
  
  var onecount2;
  onecount2=0;
  subcat = new Array();
  <%
  count = 1
  lastm = ""
  %>
  subcat[0] = new Array("0","请先选择县级联社","0");
  <%
  rsel.open "Select XjlsDH,JC,SH From XYS Order By XjlsDH,SH",MyConn,1,1
  do while not rsel.eof
  if lastm <> trim(rsel("XjlsDH")) then
  %>
  subcat[<%=count%>] = new Array("<%= trim(rsel(0))%>","请选择信用社","0");
  <%
  lastm = trim(rsel("XjlsDH"))
  count = count + 1
  end if
  %>
  subcat[<%=count%>] = new Array("<%= trim(rsel("XjlsDH"))%>","<%= trim(rsel("JC"))%>","<%= trim(rsel("SH"))%>");
  <%
  count = count + 1
  rsel.movenext
  loop
  rsel.close
  %>
  onecount2=<%=count%>;
  
  
  function ChangeXjlsDH(locationid)
  {
  document.DQKSELECT.XjlsDH.length = 0;
  var locationid=locationid;
  var i;
  for (i=0;i < onecount1; i++)
  {
  if (rootcat[i][0] == locationid)
  {
  document.DQKSELECT.XjlsDH.options[document.DQKSELECT.XjlsDH.length] = new Option(rootcat[i][1], rootcat[i][2]);
  }
  }
  
  }
  
  function ChangeSH(locationid)
  {
  document.DQKSELECT.SH.length = 0;
  var locationid=locationid;
  var i;
  for (i=0;i < onecount2; i++)
  {
  if (subcat[i][0] == locationid)
  {
  document.DQKSELECT.SH.options[document.DQKSELECT.SH.length] = new Option(subcat[i][1], subcat[i][2]);
  }
  }
  
  }
  ChangeXjlsDH(0)
  ChangeSH(0)
  </script>
  <%
  End Sub

*********************************************************************************************************************

<script language=vbScript>
<!--
public x(33)
x( 0 )="东城,西城,崇文,宣武,朝阳,丰台,石景山,海淀,门头沟,房山,通州,顺义,昌平,大兴,平谷,怀柔,密云,延庆"
x( 1 )="黄浦,卢湾,徐汇,长宁,静安,普陀,闸北,虹口,杨浦,闵行,宝山,嘉定,浦东,金山,松江,青浦,南汇,奉贤,崇明"
x( 2 )="和平,东丽,河东,西青,河西,津南,南开,北辰,河北,武清,红挢,塘沽,汉沽,大港,宁河,静海,宝坻,蓟县"
x( 3 )="万州,涪陵,渝中,大渡口,江北,沙坪坝,九龙坡,南岸,北碚,万盛,双挢,渝北,巴南,黔江,长寿,綦江,潼南,铜梁,大足,荣昌,壁山,梁平, 城口,丰都,垫江,武隆,忠县,开县,云阳,奉节,巫山,巫溪,石柱,秀山,酉阳,彭水,江津,合川,永川,南川"
x( 4 )="石家庄,邯郸,邢台,保定,张家口,承德,廊坊,唐山,秦皇岛,沧州,衡水"
x( 5 )="太原,大同,阳泉,长治,晋城,朔州,吕梁,忻州,晋中,临汾,运城"
x( 6 )="呼和浩特,包头,乌海,赤峰,呼伦贝尔盟,阿拉善盟,哲里木盟,兴安盟,乌兰察布盟,锡林郭勒盟,巴彦淖尔盟,伊克昭盟"
x( 7 )="沈阳,大连,鞍山,抚顺,本溪,丹东,锦州,营口,阜新,辽阳,盘锦,铁岭,朝阳,葫芦岛"
x( 8 )="长春,吉林,四平,辽源,通化,白山,松原,白城,延边"
x( 9 )="哈尔滨,齐齐哈尔,牡丹江,佳木斯,大庆,绥化,鹤岗,鸡西,黑河,双鸭山,伊春,七台河,大兴安岭"
x( 10 )="南京,镇江,苏州,南通,扬州,盐城,徐州,连云港,常州,无锡,宿迁,泰州,淮安"
x( 11 )="杭州,宁波,温州,嘉兴,湖州,绍兴,金华,衢州,舟山,台州,丽水"
x( 12 )="合肥,芜湖,蚌埠,马鞍山,淮北,铜陵,安庆,黄山,滁州,宿州,池州,淮南,巢湖,阜阳,六安,宣城,亳州"
x( 13 )="福州,厦门,莆田,三明,泉州,漳州,南平,龙岩,宁德,东山"
x( 14 )="南昌市,景德镇,九江,鹰潭,萍乡,新馀,赣州,吉安,宜春,抚州,上饶"
x( 15 )="济南,青岛,淄博,枣庄,东营,烟台,潍坊,济宁,泰安,威海,日照,莱芜,临沂,德州,聊城,滨州,菏泽"
x( 16 )="郑州,开封,洛阳,平顶山,安阳,鹤壁,新乡,焦作,濮阳,许昌,漯河,三门峡,南阳,商丘,信阳,周口,驻马店,济源"
x( 17 )="武汉,宜昌,荆州,襄樊,黄石,荆门,黄冈,十堰,恩施,潜江,天门,仙桃,随州,咸宁,孝感,鄂州"
x( 18 )="长沙,常德,株洲,湘潭,衡阳,岳阳,邵阳,益阳,娄底,怀化,郴州,永州,湘西,张家界"
x( 19 )="广州,深圳,珠海,汕头,东莞,中山,佛山,韶关,江门,湛江,茂名,肇庆,惠州,梅州,汕尾,河源,阳江,清远,潮州,揭阳,云浮"
x( 20 )="南宁,柳州,桂林,梧州,北海,防城港,钦州,贵港,玉林,南宁地区,柳州地区,贺州,百色,河池"
x( 21 )="海口,三亚"
x( 22 )="成都,绵阳,德阳,自贡,攀枝花,广元,内江,乐山,南充,宜宾,广安,达川,雅安,眉山,甘孜,凉山,泸州"
x( 23 )="贵阳,六盘水,遵义,安顺,铜仁,黔西南,毕节,黔东南,黔南"
x( 24 )="昆明,大理,曲靖,玉溪,昭通,楚雄,红河,文山,思茅,西双版纳,保山,德宏,丽江,怒江,迪庆,临沧"
x( 25 )="拉萨,日喀则,山南,林芝,昌都,阿里,那曲"
x( 26 )="西安,宝鸡,咸阳,铜川,渭南,延安,榆林,汉中,安康,商洛"
x( 27 )="兰州,嘉峪关,金昌,白银,天水,酒泉,张掖,武威,定西,陇南,平凉,庆阳,临夏,甘南"
x( 28 )="银川,石嘴山,吴忠,固原"
x( 29 )="西宁,海东,海南,海北,黄南,玉树,果洛,海西"
x( 30 )="乌鲁木齐,石河子,克拉玛依,伊犁,巴音郭勒,昌吉,克孜勒苏柯尔克孜,博 尔塔拉,吐鲁番,哈密,喀什,和田,阿克苏"
x( 31 )=""
x( 32 )=""
x( 33 )="台北,高雄,台中,台南,屏东,南投,云林,新竹,彰化,苗栗,嘉义,花莲,桃园,宜兰,基隆,台东,金门,马祖,澎湖"

function test(a,b)
dim num,x1,i
num =a.selectedIndex
x1=split(x(num),",")
b.options.length=ubound(x1)+1
For i = 0 to ubound(x1)
b.options(i).text =x1(i)
b.options(i).value = x1(i)
next
end function
-->
</script>
<body>
<select name="a" onChange="vbscript:test a,b">
<option value= 0 >北京</option>
<option value= 1 >上海</option>
<option value= 2 >天津</option>
<option value= 3 >重庆</option>
<option value= 4 >河北</option>
<option value= 5 >山西</option>
<option value= 6 >内蒙古</option>
<option value= 7 >辽宁</option>
<option value= 8 >吉林</option>
<option value= 9 >黑龙江</option>
<option value= 10 >江苏</option>
<option value= 11 >浙江</option>
<option value= 12 >安徽</option>
<option value= 13 >福建</option>
<option value= 14 >江西</option>
<option value= 15 >山东</option>
<option value= 16 >河南</option>
<option value= 17 >湖北</option>
<option value= 18 >湖南</option>
<option value= 19 >广东</option>
<option value= 20 >广西</option>
<option value= 21 >海南</option>
<option value= 22 >四川</option>
<option value= 23 >贵州</option>
<option value= 24 >云南</option>
<option value= 25 >西藏</option>
<option value= 26 >陕西</option>
<option value= 27 >甘肃</option>
<option value= 28 >宁夏</option>
<option value= 29 >青海</option>
<option value= 30 >新疆</option>
<option value= 31 >香港</option>
<option value= 32 >澳门</option>
<option value= 33 >台湾</option>

</select>
<select name="b">
</select>
</body>

*****************************************************************

这里是以省份和城市为例,由于用到数据库,请先建立数据库dlist.mdb

数据库名称:dlist.mdb

省份表名称:Province
字段有:p_id(类型:自动编号),p_name(类型:文本,省份名称)

城市表名称:City
字段有:c_id(类型:自动编号),c_pid(类型:文本,省份名称,等于Province表中的p_name),c_name(类型:文本,城市名称)

源程序如下,保存为ASP文件即可执行。
------------------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JS动态列表示例</title>
<script language="JavaScript"><!--
<%
dim conn,rs,grs,i,j,pstr,sstr
set conn=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
set grs=server.createobject("adodb.recordset")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("dlist.mdb")
'写省份JS数组
rs.open "select * from province;",conn,1,1
pstr="var pstr=new Array("
for i=0 to rs.recordcount-1
if i<>rs.recordcount-1 then
pstr=pstr & "'" & rs("p_name") & "',"
else
pstr=pstr & "'" & rs("p_name") & "'"
end if
getsub(rs("p_name"))
rs.movenext
next
pstr=pstr & ");"
response.write pstr & vbcrlf
rs.close()
set rs=nothing
set grs=nothing

'根据省份写城市JS数组的过程
sub getsub(pname)
grs.open "select * from city where c_pid='" & pname & "';",conn,1,1
sstr="var sstr" & i & "=new Array("
for j=1 to grs.recordcount
if j<>grs.recordcount then
sstr=sstr & "'" & grs("c_name") & "',"
else
sstr=sstr & "'" & grs("c_name") & "'"
end if
grs.movenext
next
grs.close()
sstr=sstr & ");"
response.write sstr & vbcrlf
end sub
%>

//添加列表项目
//参数说明:FrmName-表单名、sName-要添加的列表名、sText-列表项显示的文本、sValue-列表项的值
function addOption(FrmName, sName, sText, sValue) {
var def = true;
var sel = true;
var optionName = new Option(sText, sValue, def, sel);
var length = FrmName[sName].length;
FrmName[sName].options[length] = optionName;
FrmName[sName].options[length].selected = false;
}

//删除列表项目
//参数说明:FrmName-表单名、sName-要删除的列表名、force-是否删除原来的项目(True删除,False保留)
function delOptions(FrmName, sName, force) {
var length = FrmName[sName].options.length;
for (var i=0; i<FrmName[sName].options.length; i++) {
if (FrmName[sName].options[i].selected || force) {
FrmName[sName].options[i] = null;
length--;
i--;
}
}
}

//获得要添加列表项目的数组;
//参数说明:what-要获得选定值的列表
function getArrayValue(what) {
return eval(what.options[what.options.selectedIndex].value);
}

//根据当前选定值,添加列表项目
//参数说明:FrmName-表单名、sName1-要获取选定值的列表名、sName2-要动态加载的列表名
function updateOptions(FrmName, sName1, sName2) {
delOptions(FrmName,sName2,true);
var ArrayValue=getArrayValue(FrmName[sName1]);
for (var i=0; i<ArrayValue.length;i+=1) {
addOption(FrmName,sName2,ArrayValue[i],'sstr'+i);
}
FrmName[sName2].options.selectedIndex =0;//设置默认显示的列表项目
}

function GetValue(k){
alert(k);
}

//--></script>
</head>

<body onLoad="updateOptions(frmdlist, 'lsti', 'lstb');updateOptions(frmdlist, 'lstb', 'lsts')">
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<form action="" method="post" name="frmdlist" id="frmdlist">
<table width="408" border="0" align="center" cellpadding="2" cellspacing="2">
<tr>
<td width="400">JS动态列表示例<select name="lsti" style="display:none"><option value="pstr">pstr</select></td>
</tr>
<tr>
<td><select style="width:200" name="lstb" id="lstb" onChange="updateOptions(this.form, 'lstb', 'lsts')">
</select>
<input type="button" name="Submit2" value="GetValue" onClick="GetValue(document.frmdlist.lstb.value)"></td>
</tr>
<tr>
<td><select style="width:200" name="lsts" id="lsts">
</select>
<input type="button" name="Submit" value="GetValue" onClick="GetValue(document.frmdlist.lsts.value)"></td>
</tr>
</table>
</form>
</body>
</html>

ASP二级联动下拉菜单相关推荐

  1. popwindow下拉筛选 二级联动_职场人必备!一分钟搞定Excel二级联动下拉菜单

    对于一级下拉菜单的设置,相信经常使用Excel的用户都不陌生,那么,二级联动下拉菜单又是什么呢?与一级下拉菜单有什么关系呢? 二级联动下拉菜单是根据一级下拉菜单内容的变化而变化的.大家都知道,不同的部 ...

  2. php下拉列表 二级 联动,PHP+Ajax实现二级联动下拉菜单!

    正文 字体大小: 中 PHP+Ajax实现二级联动下拉菜单! (2009-12-05 01:11:39) 标签: 杂谈 数据库 .................................... ...

  3. 下拉默认选择_在Excel中制作二级联动下拉菜单,太有用了

    对于一级下拉菜单的设置,相信经常使用Excel的用户都不陌生,那么,二级联动下拉菜单又是什么呢?与一级下拉菜单有什么关系呢? 二级联动下拉菜单是根据一级下拉菜单内容的变化而变化的.大家都知道,不同的部 ...

  4. dw二级联动下拉菜单插件 宋君墨_Excel下拉菜单不会做?15秒教会你制作一二三级联动下拉菜单,从此做表不求人!...

    Hi,各位叨友们好呀!我是叨叨君~ 我们都知道,在使用Excel表格统计数据的时候,为了方便录入,通常会在Excel中设置下拉菜单,以便我们输入相同的内容. 那么,Excel中一级.二级.三级联动下拉 ...

  5. javascript实现下拉条联动_js实现select二级联动下拉菜单

    本文实例为大家分享了js实现select二级联动下拉菜单,供大家参考,具体内容如下 String path = request.getContextPath(); String basePath = ...

  6. JavaScript实现二级联动下拉菜单

    最近学习前端js,做了一个二级联动下拉菜单.二级下拉菜单的内容随着一级下拉菜单选项的更改而更改.菜单的内容是手动存在js的数组里的,随便写了几个数据. 效果图: 实现源码: <!DOCTYPE ...

  7. jquery二级联动下拉菜单

    二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动.本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果. 先看下效果 大类: 前端技术 ...

  8. addoption php,无忧建站-ajax+php无刷新二级联动下拉菜单(省市联动)源码

    /** * ajax无刷新二级联动下拉菜单(省市联动) * * @author      arcow * @version     1.0 * @lastupdate  2005-12-29 * */ ...

  9. dw二级联动下拉菜单插件 宋君墨_Excel实例——一级、二级、多级下拉菜单一次讲透...

    啥叫下拉菜单?啥叫一级?二级?多级?你们都在说啥? 一级下拉菜单 其实是一级,这里就不再多次强调是一级了,就是下拉菜单! 当需要多人填写,又保证填写规范的时候,下拉菜单使用起来是非常有必要了!两种办法 ...

最新文章

  1. 201403-4 无线网络
  2. Port already be taken
  3. js操作cookie的函数
  4. 从ReadImage到ML- 一个不错的博客
  5. 仓库无证如何处罚_“非现场执法”查处无证网约车,罚款15万!滴哥:怎们罚的都不知道!...
  6. java过去不到空单元格,Java POI。空白时跳过单元格
  7. PythonWEB框架之Tornado
  8. C++中二维数组的动态分配
  9. linux网络编程学习笔记之四 -----多-threaded服务器
  10. 数据仓库是如何分层的?
  11. 面试经历---广州YY(欢聚时代)
  12. 分享一些前端主流面试题
  13. 算法:根据四色定理(Four color theorem),求出地图的所有着色方案
  14. 微信JSAPI支付对接流程及支付接口设计
  15. 微信摩拜怎么提示服务器错误,微信摩拜老是定位失败
  16. python库和语言手册_pytorch 中文手册
  17. [RK3399][Android7.1]修改系统配置同时输出Speaker和USB音频
  18. 入门 AR 开发你必须要知道的事
  19. marvell FDB - MAC地址表
  20. 安卓爱笑话5.0全面升级

热门文章

  1. 评论:全美达不玩CPU了
  2. python+opencv横向拼接视频
  3. 基于贝叶斯分类器进行sklearn乳腺癌数据集的分类
  4. 云电脑的四重守护,安全有谱
  5. 3.2 图像几何变换——旋转变换
  6. spring 集成 mina入门
  7. winner组合_韩国艺人WINNER成员金秦禹入伍服役,板寸发型依然不失帅气
  8. 金山安全和可牛合并仪式明日举行 雷军将出席
  9. Altium Designer 20/AD20程序安装及注意事项
  10. bugku ctf 杂项 白哥的鸽子(咕咕咕)