请教各位高手,帮忙调试一下 二级联动菜单,非常感谢!

woshiliumang 2005-12-19 09:46:48
<%
dim sql

dim rs

dim count
set rs=server.createobject("adodb.recordset")
sql="select * from department order by departmentid asc"
rs.open sql,conn,1,1
%>
<script language="javascript">
<!--
var onecount;
onecount=0;
subcat = new Array();
<%
count = 0
do while not rs.eof
%>
subcat[<%=count%>] = new Array("<%= trim(rs("departmentname"))%>","<%= trim(rs("schoolid"))%>","<%= trim(rs("departmentid"))%>");
<%
count = count + 1
rs.movenext
loop
rs.close
%>
onecount=<%=count%>;//从专业表中建立数组

function changelocation(locationid)// 第一个select的响应事件
//将一级分类的value传给changelocation()函数,生成二级分类的列表

{
document.myform.subject.length = 0;

var locationid=locationid;
var i;
for (i=0;i < onecount; i++)
{
if (subcat[i][1] == locationid)
{
document.myform.subject.options[document.myform.subject.length] = new Option(subcat[i][0], subcat[i][2]);
}
}

}



//-->
</script>


//以下是在第一个select中,生成学校
<%
sql = "select * from school"
rs.open sql,conn,1,1
if rs.eof and rs.bof then
response.write "请先添加学校。"
response.end
else
%>

<select name="subject1" onChange="changelocation(document.myform.subject1.options[document.myform.subject1.selectedIndex].value)" size="1">
<option selected value="<%=trim(rs("schoolid"))%>"><%=trim(rs("schoolname"))%></option>


<% dim tempschoolid
tempschoolid=rs("schoolid")//把学校的id赋值给tempschool 为第二个select调用
rs.movenext
do while not rs.eof
%>
<option value="<%=trim(rs("schoolid"))%>"><%=trim(rs("schoolname"))%></option>
<%
rs.movenext
loop
end if
rs.close
%>
//以下为第二个select

<select name="subject">

<%sql="select * from department where schoolid="&tempschoolid//根据先前的赋值,查询专业
rs.open sql,conn,1,1
if not(rs.eof and rs.bof) then
%>
<option value="<%=rs("departmentid")%>"><%=rs("departmentname")%></option>
<% rs.movenext
do while not rs.eof%>
<option value="<%=rs("departmentid")%>"><%=rs("departmentname")%></option>
<% rs.movenext
loop
end if
rs.close

%>
</select>


请教各位高手,我现在存在的问题是,点击第一个鼠标,不能进行响应事件,如果第一个select中显示的学校为“清华大学”,第二个select中只出现清华大学的专业,但是下拉菜单后选择其他学校不能显示其他的学校的专业,就是这个问题比较难搞定,我看了几个类似的代码,就是不知道错误在哪里啊!
...全文
239 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
starytx 2005-12-19
  • 打赏
  • 举报
回复
仅供参考
<%

'表 wplb 结构 wlid(自动编号) lbmc(nvarchar)
'表 wpmc 结构 wpid(自动编号) wplb(int) wpmc(nvarchar)
'其中 wlid --- wplb 关联字段

ConnStr = "driver={SQL Server};server=127.0.0.1;uid=sa;pwd=123;database=Fzarticle"
On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
conn.open ConnStr
set rs2=server.CreateObject ("ADODB.RecordSet")
rs2.source="select * from wplb"
rs2.Open rs2.source,conn,1,1
dim rs
dim sql
dim count
set rs=server.createobject("adodb.recordset")
sql = "select * from wpmc order by id"
rs.open sql,conn,1,1
%>
<script language="JavaScript">
var onecount;
onecount=0;
subcat = new Array();
<%
count = 0
do while not rs.eof
%>
subcat[<%=count%>] = new Array("<%= trim(rs("wpmc"))%>","<%= trim(rs("wplb"))%>","<%= trim(rs("wpid"))%>");
<%
count = count + 1
rs.movenext
loop
rs.close
%>
onecount=<%=count%>;
function changelocation(locationid)
{
document.form1.wlmc.length = 0;
document.form1.wlmc.options[document.form1.wlmc.length] = new Option("请选择小类", "");
var locationid=locationid;
var i;
for (i=0;i < onecount; i++)
{
if (subcat[i][1] == locationid)
{
document.form1.wlmc.options[document.form1.wlmc.length] = new Option(subcat[i][0], subcat[i][2]);
}
}
}
</script>
<html><head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body topmargin="0">
<table align=center>
<form name=form1 method="post" action="">
<tr bgcolor="#FFFFFF">
<td align="center">
<p> </p>
<p>物品类别:
<select name="wplb" onChange="changelocation(document.form1.wplb.options[document.form1.wplb.selectedIndex].value)" size="1">
<option selected value="">请选择物品类别</option>
<%
do while not rs2.eof
%>
<option value="<%=trim(rs2("wlid"))%>"><%=trim(rs2("lbmc"))%></option>
<%
rs2.movenext
loop
rs2.close
%>
</select>
物品名称:
<select name="wlmc" size="1">
<option selected value="">请选择物品名称</option>
</select>
</p>
</td>
</tr>
<tr>
<td align="center" height=25 class="TDtop">
<input type="submit" value="提交" name="B1" style="font-size: 9pt; color: #000000; background-color: #EAEAF4; solid #EAEAF4" onMouseOver ="this.style.backgroundColor='#ffffff'" onMouseOut ="this.style.backgroundColor='#EAEAF4'">
</td>
</tr>
</form>
</table>
</body>
</html>
woshiliumang 2005-12-19
  • 打赏
  • 举报
回复
刚才又测试了一下
还是 select 的onchange 事件没有 响应的问题
lonaerd 2005-12-19
  • 打赏
  • 举报
回复
你这个是需要刷新的二级联动吧?
woshiliumang 2005-12-19
  • 打赏
  • 举报
回复
谢谢楼上的。这样改即使点击第一个,第二个select还不会做出变化
我估计是 第一个select的 onchange 事件没有得到响应,如果是,请问高手为什么啊!
82yuxuan 2005-12-19
  • 打赏
  • 举报
回复
//以下为第二个select

<select name="subject">

<%sql="select * from department where schoolid="&tempschoolid//根据先前的赋值,查询专业

....把 where schoolid="&tempschoolid删除了可以得到你要的一点......不过问题也出来了,没定未查询,第二个SELECT获取的值DEPARTEMNT的全部值...这个时候需要点击第一个SELECT才可以做出变化... 我也正为这个问题..呵呵
woshiliumang 2005-12-19
  • 打赏
  • 举报
回复
谢谢各位,原来是小弟犯了一个低级错误,实在不好意思
sujinlin 2005-12-19
  • 打赏
  • 举报
回复
子菜单不是在开始生成了么?为什么还要在这里生成?????

<select name="subject">

<%sql="select * from department where schoolid="&tempschoolid//根据先前的赋值,查询专业
rs.open sql,conn,1,1
if not(rs.eof and rs.bof) then
%>
<option value="<%=rs("departmentid")%>"><%=rs("departmentname")%></option>
<% rs.movenext
do while not rs.eof%>
<option value="<%=rs("departmentid")%>"><%=rs("departmentname")%></option>
<% rs.movenext
loop
end if
rs.close

%>
</select>


我看了下,基本原理如下:
脚本中生成二级菜单,同时里面还有一个函数,功能用于控制前面生成的菜单。

页面中插入联动主菜单,并有onchange事件。

<select name="" onchange="">
读取数据库加载信息
</select>

插入联动子菜单。

<select name=""></select>〈--这里调用的其实是开始脚本中生成的数组

woshiliumang 2005-12-19
  • 打赏
  • 举报
回复
可否问一下高手们,为什么我的select onchange 事件没有响应啊!

28,406

社区成员

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

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