Select中onChange引起的两个下拉框级联互动(在线等)

loveme2000ok 2003-12-03 10:16:32
各位大虾:帮小弟一个忙吧。有两个select,第一个select从一个从表中读取,value中保存其id,当第一个select改变时,读取数据库中一个表其id为第一个选项value值的记录,把结果写为第二个select的项,各位大虾赐招哦??
数据库设计如下:(Fieldname表)
ID 字段名 显示名 字段类型
1 地址 家庭住址 文本
10 开户行 开户银行 文本
11 公司名称 公司名称 文本
2 姓名 用户姓名 文本
3 编号 用户编号 数字
4 购车日期 购车日期 日期
5 证件号码 证件号码 文本
6 手机 手机号码 文本
7 车牌号 车牌号 文本
8 挂车号 挂车号 文本
9 电话号码 电话号码 文本
(dkzl表2)
548 张海英A No 斯太尔 石家庄综合冀AG2797
1299 刘得民 No 解放自缷 滦县卡车 冀5015
1552 张天永 No 长安 石家庄综合冀AD6671
1297 王建东 No 解放自缷 滦县卡车 冀5027
1546 梁建南A No 飞花挂车 石家庄综合冀A5591
1553 吕满秋B No 福田 石家庄综合冀AC5076
1555 李慧丽 No 昌河 石家庄综合冀AL1687
1556 江伟 No 桑塔纳 石家庄综合冀AV6680
2006 王瑞霆 No 长安 唐山富康 冀BE2598
953 何立平 No 解放  石家庄解放冀AK4114
954 何欣朝 No 解放  石家庄解放冀AK4133
263 夏玉果 No 东风 唐山东风 冀B53713
269 王爱民 No 东风 唐山东风 冀BS7332
两个表就是上面的情况,我的想法是从第一个表中读取显示名称字段,放在select1中,选取select1中的某一项内容,比如:选取公司名称,在select2中显示各个公司,sql语句不是问题,我的难点就是怎么能实现在这两个select之间的连动性,我只了解一点点VBscript语言,所以还希望各位能够用VBscript语言实现,谢谢了。帮小弟提供一个可以运行的类似的程序也感激不尽。
另外还有一个问题,小菜总是不明白是什么意思,请各位赐教:
<select onchange="location.href='edit.asp?param=' + this.value">
这一句话怎么描述,为什么在后面要加上this.value这个值又是怎么讲的。
<%
'接受参数
param = request.querystring("param")
'根据此参数作出处理
'...
%>
这个参数又以何种方式传回。谢谢了。



...全文
1251 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveme2000ok 2003-12-04
  • 打赏
  • 举报
回复
yeno(无忧天)师兄:
两个建议我都试过了,可是还是不行,能为能帮我亲自改一下吗,文件不大,我把文件发给你。谢谢回贴。
我的QQ:22168264
yeno 2003-12-04
  • 打赏
  • 举报
回复
如果还不行的话,再改成下面的
<SELECT onchange=redirect(this.options.selectedIndex) size=1 name=S1>
<%do while not rs.eof%>
<option value='param.asp?param="&rs("ID")&"‘>
<%Response.write Rs("显示名")%></option>
<%rs.movenext
loop
yeno 2003-12-04
  • 打赏
  • 举报
回复
改成下面的试试看
<select size="1" name="S1" onChange="location.href='param.asp?param='+this.value">
<%do while not rs.eof%>
<option value="&rs("ID")&"><%Response.write Rs("显示名")%></option>
<%rs.movenext
loop
loveme2000ok 2003-12-04
  • 打赏
  • 举报
回复
//customer.asp关键代码如下:
<%
Set Rs1=Server.CreateObject("Adodb.Recordset")
if request.querystring("param")<>"" then
param=request.querystring("param")
sql1="select * from Fieldname where 显示名='"¶m&"'"
else
sql1="select * from Fieldname where 显示名='"¶m&"'"
end if
rs1.open sql1,CConn,3,1,adcmdtext
%>
<select size="1" name="S1" onChange="location.href='param.asp?param='+this.value">
<%do while not rs.eof%>
<option value=<%=rs("ID")%>><%Response.write Rs("显示名")%></option>
<%rs.movenext
loop
rs.close
set rs=nothing
CConn.close
set CConn=nothing
%>


//param.asp

<%
param=request.querystring("S1")
response.redirect("customer.asp?param='"¶m&"'")
%>
各位心心好吧,帮个忙看一下吧,我是这么写的怎么不行呢,哪里出了问题?

loveme2000ok 2003-12-04
  • 打赏
  • 举报
回复
师兄们会:
http://127.0.0.1/customer.asp?param=''
为什么总是一片空白,上边有完整的程序,帮一下忙看看好吗?
loveme2000ok 2003-12-04
  • 打赏
  • 举报
回复
师兄们,我快晕死了,你们能不能从我的角度考虑一下问题的所在,总是看你的如此长的代码,不行的,仍然谢谢!
xxrl 2003-12-04
  • 打赏
  • 举报
回复
http://www.csdn.net/develop/read_article.asp?id=20679
gq 2003-12-04
  • 打赏
  • 举报
回复
数据库版
<%
set cnn=server.CreateObject ("adodb.connection")
set rs=server.createobject("adodb.recordset")
cnn.open application("connectionstring")
%>
<script LANGUAGE="javascript">
<!--
var onecount;
onecount=0;
subcat = new Array();
<%
strsql = "select * from tblbureau where 1=1 "
if session("middle_bureau")<>"" then
strsql = strsql & " and middle_bureau='" & session("middle_bureau") & "'"
end if
if session("essential_bureau")<>"" then
strsql = strsql & " and essential_bureau='" & session("essential_bureau") & "'"
end if
set rs =cnn.execute(strsql)
dim i
i=0
do while not rs.eof %>
subcat[<%=i%>] = new Array("<%=rs("essential_bureau")%>","<%=rs("middle_bureau")%>","<%=rs("essential_bureau")%>");<%
i=i+1
rs.movenext
loop
%>
onecount=<%=i%>;

function changelocation(locationid)
{
document.frmsetup.essential_bureau.length = 0;
var locationid=locationid;
var i;
document.frmsetup.essential_bureau.options[0] = new Option('请选择','');
for (i=0;i < onecount; i++)
{
if (subcat[i][1] == locationid)
{
document.frmsetup.essential_bureau.options[document.frmsetup.essential_bureau.length] = new Option(subcat[i][0], subcat[i][2]);
}
}

}
//-->
</script>
<form name=frmsetup>
<tr class=tb2>
<td width="15%" class=t1> 所在区</td>
<td width="35%" class=t1> <select size="1" name="settle_region" class=f1 onChange="changelocation(document.frmsetup.settle_region.options(document.frmsetup.settle_region.selectedIndex).value)">
<option value="">请选择</option>
<option value="罗湖">罗湖</option>
<option value="福田">福田</option>
<option value="南山">南山</option>
<option value="盐田">盐田</option>
<option value="宝安">宝安</option>
<option value="龙岗">龙岗</option>
</select>
</td>
<td width="15%" class=t1> 所在所</td>
<td width="35%" class=t1> <select size="1" name="essential_bureau" class=f1>
<option value="">请选择</option>
</select>
</td>
</tr>
<script LANGUAGE="javascript">
<!--
changelocation(document.frmsetup.settle_region.options(document.frmsetup.settle_region.selectedIndex).value)
//-->
</script>
</form>
loveme2000ok 2003-12-04
  • 打赏
  • 举报
回复
yeno(无忧天):你好,你看看我的两个ASP的页面内容,为什么总是出现在如下情况。
http://127.0.0.1/customer.asp?param=''
这是什么原因,谢谢回帖。

//customer.asp
<!--#include file=CustomMdbConn.asp-->
<!--#include file=Adovbs.inc-->
<%
Set Rs=Server.CreateObject("Adodb.Recordset")
Sql="Select * from FieldName"
Rs.open sql,CConn,3,1,adCmdtext
%>
<%
Set Rs1=Server.CreateObject("Adodb.Recordset")
if request.querystring("param")<>"" then
param=request.querystring("param")
sql1="select * from Fieldname where 显示名='"¶m&"'"
else
sql1="select * from Fieldname where 显示名='"¶m&"'"
end if
rs1.open sql1,CConn,3,1,adcmdtext
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>客户核实查询</title>
</head>
<body>
<form method="get" name="form1">
<div align="center">
<table border="0" width="867" height="5" cellspacing="1">
<tr>查询方式:<select size="1" name="S1" onChange="location.href='param.asp?param='+this.value">
<%do while not rs.eof%>
<option value=<%=rs("ID")%>><%Response.write Rs("显示名")%></option>
<%rs.movenext
loop
rs.close
set rs=nothing
CConn.close
set CConn=nothing
%>
</select>
<select name=S1 size=1>
<%do while not rs1.eof%>
<option><%=rs1("字段名")%></option>
<%rs1.mvoenext
loop
rs1.close
set rs1=nothing
%>
</select>
<input type="submit" value="搜索" name="C_Search">

</tr>
</table>
</div>
</form>
</body>
</html>
//param.asp
<%
param=request.querystring("s1")
response.redirect("customer.asp?param='"¶m&"' ")
%>


loveme2000ok 2003-12-04
  • 打赏
  • 举报
回复
送分了,不过先请教一个问题?select是否支持文本的输入,我说的是在网页中的时候。如果可以话,如何写?
loveme2000ok 2003-12-04
  • 打赏
  • 举报
回复
谢谢 yeno(无忧天) 帮忙招兵买马。我又重新发了一个贴子。怕这个太落后了,没有会发现。
yeno 2003-12-04
  • 打赏
  • 举报
回复
问题出得很古怪,我帮你UP
兄弟们,这个问题很特别,请高手进来看看
yeno 2003-12-03
  • 打赏
  • 举报
回复
可以呀,针对你出现的下列情况
可是为什么我运行的时候,地址栏里会出现这样的情况:
http://127.0.0.1/edit.asp?param=
参数也没有。页面是一片空白

解决方法如下:
这是由于你在传值时的空格引起的,比如说
href=aa.asp?param= <%=mm%>
应该写成紧凑型,去掉之间所有空格,如下
href=aa.asp?param=<%=mm%>
就不会出现阁下所示问题,记住,不能有空格
loveme2000ok 2003-12-03
  • 打赏
  • 举报
回复
yeno(无忧天)师兄:我可是有话在先了,我是javascript盲人,如果可以的话,能不能用VBscript语言帮小弟写一段。仍然谢谢!
loveme2000ok 2003-12-03
  • 打赏
  • 举报
回复
谢谢大笨狼的提醒。夜深了,如果您累的话,你先休息吧,明日结果出来了,我会回敬各位的。
loveme2000ok 2003-12-03
  • 打赏
  • 举报
回复
可是为什么我运行的时候,地址栏里会出现这样的情况:
http://127.0.0.1/edit.asp?param=
参数也没有。页面是一片空白。
谢谢回帖。
超级大笨狼 2003-12-03
  • 打赏
  • 举报
回复
我的连动列表外面没form,如果放在form里,别忘记所有select前面加form1.select
yeno 2003-12-03
  • 打赏
  • 举报
回复
我们以前在Delphi中经常用到联动的下拉框,也就是当一个下拉框的值改变时,另一个下拉框显示与之关联的值...
网页中也可以轻易实现,这种方法我比较喜欢用,给你看一个双向关联下拉表单的实例
不过这个是静态的,你很容易可以将它改为动态的
<FORM name=doublecombo><SELECT onchange=redirect(this.options.selectedIndex)
size=1 name=example> <OPTION selected>应用技术开发网站</OPTION>
<OPTION>国内JavaScript技术网站</OPTION> <OPTION>国外的著名搜索引擎</OPTION></SELECT> <SELECT
size=1 name=stage2> <OPTION value=http://www.80cn.com
selected>世纪鸟作坊</OPTION></SELECT> <INPUT onclick=go() type=button value=Go! name=test>
<P></P>
<SCRIPT>
<!--
var groups=document.doublecombo.example.options.length
var group=new Array(groups)
for (i=0; i<groups; i++)
group[i]=new Array()
group[0][0]=new Option("世纪鸟作坊","http://www.80cn.com")


group[1][0]=new Option("万旭JavaScript仓库","http://www.wanxu.com")
group[1][1]=new Option("JavaScript2000","http://www.javascript2000.com")
group[1][2]=new Option("无忧脚本","http://www.51js.com")

group[2][0]=new Option("Hotbot","http://www.hotbot.com")
group[2][1]=new Option("Infoseek","http://www.infoseek.com")
group[2][2]=new Option("Excite","http://www.excite.com")
group[2][3]=new Option("Lycos","http://www.lycos.com")
var temp=document.doublecombo.stage2
function redirect(x){
for (m=temp.options.length-1;m>0;m--)
temp.options[m]=null
for (i=0;i<group[x].length;i++){
temp.options[i]=new Option(group[x][i].text,group[x][i].value)
}
temp.options[0].selected=true
}
function go(){
location=temp.options[temp.selectedIndex].value
}
//-->
</SCRIPT>
</FORM>
yeno 2003-12-03
  • 打赏
  • 举报
回复
不会弹出一个网页,只是相当于给页面重新刷新一次,接受新值而已,你可以试试的
超级大笨狼 2003-12-03
  • 打赏
  • 举报
回复

我自己做的连动下拉列表送给大家
Access数据库
● 数据库名:DB_ProvinceCat
● 表名:1)Tb_Province 2)Tb_City
说明:表Tb_Province用来存放省份名称;表Tb_City用来存放相应的城市名称。
● 字段名的设计
1) 表Tb_Province的字段有省份ID号(ProvinceCatID)、省份代码(ProvinceCode)、省份名称(ProvinceName),表1给出了示例:
ProvinceCatID ProvinceCode ProvinceName
1 01 北京市
2 02 上海市
3 03 天津市
4 04 重庆市
5 05 广东省
6 06 浙江省
7 07 福建省
8 08 海南省
9 09 江苏省
表1
2) 表Tb_City的字段有城市ID号(CityID)、城市代码(CityCode)、城市名称(CityName),表2给出了示例:

CityID CityCode CityName
1 01001 北京市
2 02001 上海市
3 03001 天津市
4 04001 重庆市
5 05001 广州市
6 05002 深圳市
7 05003 珠海市
8 05004 茂名市
9 05005 中山市
10 06001 杭州市
11 06002 温州市
12 07001 福州市
13 07002 厦门市
14 08001 海口市
15 08002 三亚市
16 08003 万宁市
17 08004 五指山市
18 09001 南京市
19 09002 苏州市

表2

说明:这里要注意的一点就是,身份代码要对应城市代码的头两位,数据库尽量不要出现有父亲没儿子的事情。
文件:TwoSelect.asp经简单测试好用!
<HTML>
<HEAD>
<META name=VI60_defaultClientScript content=VBScript>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

</HEAD>
<BODY>
<%
Dim Cn,Rs
Dim SQL,StrDSN
Dim MyArray()
Set cn=Server.CreateObject("ADODB.connection")
Set Rs = Server.CreateObject("ADODB.Recordset")
StrDSN = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("DB_ProvinceCat.mdb")
Cn.Open strDSN
SQL="select * from Tb_Province order by ProvinceCatID"
Rs.Open SQL,cn,3,2
Rs.MoveFirst
redim MyArray(Rs.RecordCount-1)
%>
<table width="273" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="96"> <SELECT id=select1 style="WIDTH: 96px" name=select1>
<OPTION selected value=select<%=Rs("ProvinceCode")%>><%=Rs("ProvinceName")%></OPTION>
<%
MyArray(0)=Rs("ProvinceCode")
Rs.MoveNext
for i=1 to Rs.RecordCount-1
%>
<OPTION value=select<%=Rs("ProvinceCode")%>><%=Rs("ProvinceName")%></OPTION>
<%
MyArray(i)=Rs("ProvinceCode")
Rs.MoveNext
next
%>
</SELECT>
<%
Rs.Close
%>
</td>
<td width="96">
<%
for i=0 to ubound( MyArray)
SQL="select * from Tb_City where CityCode like '" & MyArray(i) & "%'"
'Response.End
Rs.Open SQL,cn,3,2
if Rs.RecordCount >0 then
Rs.MoveFirst
%>
<SELECT id=select<%=MyArray(i)%> style="WIDTH: 96px;display='none'" name=select<%=MyArray(i)%>>
<%do while not Rs.EOF %>
<OPTION value="<%=Rs("CityName")%>"><%=Rs("CityName")%></OPTION>
<%
Rs.MoveNext
loop
%>
</SELECT>
<%
end if
Rs.Close
next
%>
<SCRIPT LANGUAGE=vbscript>
<!--

dim Province,City
dim obj,lastObj
lastObj="select01"
obj="select01"
window.execScript "select01.style.display='block'" ,"vbs"
Province="北京市"
City="北京市"
Sub select1_onchange
obj=select1.value
if obj<>lastObj and isobject(eval(obj)) then
window.execScript Obj & ".style.display='block'" ,"vbs"
window.execScript lastObj & ".style.display='none'" ,"vbs"
Province=select1.options(select1.selectedIndex).innertext
window.execScript "City=" & Obj & ".value" ,"vbs"
lastObj=select1.value
end if
End Sub
sub SubMe()
window.execScript "City=" & Obj & ".value" ,"vbs"
window.location.href="TwoSelect.asp?Province=" & Province & "&City=" & City
End Sub
-->
</SCRIPT>
</td>
<td width="81"><input type="button" name="Submit" value="按钮" onClick="vbs:SubMe"></td>
</tr>
</table>
</BODY>


</HTML>






加载更多回复(8)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧