请各位大侠赶快帮帮忙!多谢了!!!

sjp7977 2003-04-04 12:35:19
我想在页面上实现多个(4-6个)相互关联的下拉式菜单(即选择第一个中的某项,则第二个的选项则变为所选第一个相关联的,选中第二个中的某个后,第三个菜单的选项则变为所选第二个相关联的,依此类推)。
而且,下拉菜单的选项必须是从数据库中取出来的(可维护的).
不知道怎么实现,请各位大侠尽快帮忙,在下感激不尽!!!
...全文
34 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjp7977 2003-04-13
  • 打赏
  • 举报
回复
有没有那位大侠能提供现成的代码?
sjp7977 2003-04-05
  • 打赏
  • 举报
回复
多谢!!!
sjp7977 2003-04-04
  • 打赏
  • 举报
回复
我是想在同一个页面中实现
sjp7977 2003-04-04
  • 打赏
  • 举报
回复
也就是同如下的方式,只是我想用相关联的下拉菜单实现

{



在Sql server里面建一张表:classify_tbl表结构如下:
类别编号 Classify_id Varchar 24
类别名称 Classify_name Varchar 50

为实现递归分类采用如下编码方式:
产品类 001
产品类_1 001001
产品类_1_1 001001001
产品类_1_2 001001002
。。。。
产品类2 002
产品类2_1 002001
产品类2_1_1 002001001
产品类2_1_2 002001002
。。。
现求从数据库classify_tbl中取出数据,
用多层(理论上可实现无限层)树形菜单显示 效果如下:

产品类
产品类_1
产品类_1_1
产品类_1_2 。。。
产品类2
产品类2_1
产品类2_1_1
产品类2_1_2 .....

}
youbest 2003-04-04
  • 打赏
  • 举报
回复
一个简单但不是最好的方法:选择第一下拉菜单后提交将第一个选择提交出去,程序判断并返回与之相关联的第二项下拉菜单,选择第二个下拉菜单则提交前两个选择,程序判断返回第三个下拉菜单的内容,依此类推.
明白否?
oldsky 2003-04-04
  • 打赏
  • 举报
回复
RS技术(远程调用脚本):最大的优点是可以在不刷新页面的情况下调用服务端的代码)。正是因为这个特点,你就可以象在编写一个传统的C/S模式的程序一样,对数据库的数据进行处理了。
使用RS技术就需要客户端和服务端满足下面两个条件:
1。客户端只需要支持Java applet即可
2。而服务端只需要支持ASP即可
  换句话说,就是RS技术是完全独立与浏览器的(当然浏览器至少需要满足支持Java和JavaScript),你可以在IE中使用,也可以完全在NC中使用,这也是区别与RDS技术的一个显著特点。
  在能够灵活运用RS技术前,先要说明一个问题,就是前面也曾经提到过的“异步调用”的问题。也正是因为有异步调用,才能够实现你只刷新页面的某一部分而不用刷新整个页面。
  由于它的这个特点,你可以让服务端来实现在你浏览页面的同时对你输入数据的合法性检查(当然这可以是一系列很复杂的合法性检查,例如需要将用户输入的数据和数据库内已有的数据进行对比等,这个可不是客户端的JS能够解决的),然后当服务端返回检查结果后,你再进行相应的操作(例如弹出一个对话框告诉用户输入出错等等).异步调用时的语法如下:

  RSExecute(serverURL, functionname, param_list)

  第一个参数是你想调用的asp页面的完整的URL路径

  第二个参数是你想调用函数的名称

  后面的就是该函数需要的输入参数了
  
  如果你想调用的函数需要两个输入参数的话,就是这样的写法:

  RSExecute(serverURL, functionname, f_arg_1, f_arg_2)

当进行调用时有两种写法,

一种是有返回结果的调用方式:

objResult = RSExecute(serverURL, functionname, f_arg_1, f_arg_2);

另外一种则是没有返回结果的调用方式:

RSExecute(url, func_name, f_arg_1, f_arg_2, CallbackFunction);

  这种调用方式要特别的注意,其中的CallbackFunction是客户端的一个JS函数它表示一但RS执行完毕服务端上的调用,就会马上调用这个函数,并把结果返回到这个函数中去。

一个典型的CallbackFunction函数应该是这样的结构:   function CallbackFunction(objResult) {
    //你自己的处理过程
   }

其中唯一的输入参数objResult就是RS调用的返回值.

  下面我们假设这样一种情况:

  用户在浏览器中输入了用户的e-mail地址,然后用户离开了e-mail地址输入框进入接下来的输入过程,这个时候就是RS该上场了,它根据用户输入的地址在服务端的数据库中查询这个地址,就可以判断出这个用户是否已经存在,然后把结果返回给客户端,在客户端再使用DHTML技术在一个叫"ShowResult"的输入框里面提示用户以前输入的信息。

  function CallbackFunc(objResult) {
    // 提示用户的信息
    window[objResult.context].value = objResult.return_value;
   }
  而RSExecute()应该这么调用RSExecute(serverURL, functionname, f_arg_1, CallbackFunc,

"ShowResult");

下面还是让具体的代码来发言:

(请在使用代码前在你的服务器上建立一个叫NW的系统DSN文件,该文件使用了Northworld即中文ACCESS97自带的示例数据库)

  下面的例子是这么进行的,default.htm中分为两祯,在main.html页面中使用了RS技术,大家可以注意到在main.html中没有使用到submit所以如果你在该页面中直接敲回车键的话什么都不会出现,你必须通过鼠标单击那个"获取信息"按扭来使用这个局部页面刷新技术。在单击完该按扭后,页面会有一段小小的延迟(这段时间内java applet在后台建立了和服务端的连接)然后马上页面回复正常的鼠标,你可以在该页面中继续进行其他的操作。而不必象普通页面刷新时,你只有等待数据。而info.asp大家一眼就能够看明白,其实就是一个很简单的处理字符串的程序。

  如果大家要是对DHTML技术熟悉的话,完全可以在客户端完成这些操作。至于EmpData.asp就是服务端处理数据的程序了。好了,其中的好处大家可以自己去体会。

  特别注意,不要改变太多代码,不然很容易出错,毕竟是在使用JavaScript编程.

Default.htm文件代码如下:
<HTML>
<HEAD>
<TITLE>RS技术的实现例子</TITLE>
</HEAD>
<FRAMESET id=fset rows="70%,30%">
<FRAME name=main src="main.html">
<FRAME name=info src="info.asp">
</FRAMESET>
</HTML>

Maim.html文件代码如下
<HTML>
<HEAD>
<TITLE>RS技术的实现例子</TITLE>
</HEAD>
<BODY>
<script language="JavaScript" src="http://YourServer/_ScriptLibrary/rs.htm"></script>
<script language="JavaScript">
RSEnableRemoteScripting("http://YourServer/_ScriptLibrary");
</script>
<h1>雇员信息</h1>
<hr>
<form name=MyForm>
请输入你想查询的名字:
<br><input type=text name="empLastName" size=40>
<input type=button name=btnExecute style="width=150"
value="获取信息"
onclick="execAsynch(empLastName.value)">
</form>
<hr>

<SCRIPT LANGUAGE="javascript">
var serverURL = "http://YourServer";
var pageURL = "/batman/EmpData.asp";
function refreshPage(co)
{
if (co.status != 0) {
alert("发生异常错误\n" +
message);
}
strText = co.return_value;
top.info.location = "info.asp?info=" + escape(strText);
}
function execAsynch(empLastName)
{
RSExecute(serverURL+pageURL, "GetEmpInfoAsArray",
empLastName, refreshPage);
}
</SCRIPT>
</BODY>
</HTML>

info.asp文件代码
<HTML>
<BODY>
<%
Response.Write Request.ServerVariables("REMOTE_USER")
strText = Request.QueryString("info")
If strText = "" Then Response.End
arrData = split(strText, "|")
arrLabels = split("职工,头衔,城市,雇佣日期", ",")
%>
<table border=0>
<%
for i=0 to 3
Response.Write "<tr>"
Response.Write "<td><b>" & arrLabels(i) & "</b></td>"
Response.Write "<td><i>" & arrData(i) & "</i></td>"
next
%>
</table>
</BODY>
</HTML>

EmpData.asp文件
<%@ LANGUAGE=VBSCRIPT %>
<% RSDispatch %>

<SCRIPT RUNAT=SERVER Language=javascript>
<!--#INCLUDE VIRTUAL="/_ScriptLibrary/RS.ASP"-->

function Description()
{
this.GetEmpInfoAsArray = DoGetData;
}
public_description = new Description();

function DoGetData(empName)
{
sql = "select * from 雇员 where [名字]='" + empName + "'";
rst = new ActiveXObject("ADODB.Recordset");
rst.CursorLocation = 3;
rst.Open(sql, "NW");
i = 0;
   strText = "";
if (rst.RecordCount == 1) {
strText += rst.Fields("雇员ID").Value + " - " +
rst.Fields("尊称").Value + " " +
rst.Fields("姓氏").Value + " " +
rst.Fields("名字").Value;
strText += "|";
strText += rst.Fields("头衔").Value;
strText += "|";
strText += rst.Fields("城市").Value + " " +
rst.Fields("地区").Value + ", " +
rst.Fields("国家").Value;
strText += "|";
d = new Date(rst.Fields("雇用日期").Value);
strText += (1+d.getMonth()) + "/" + d.getDate() + "/" +d.getYear();
}
return strText;
}
</SCRIPT>



sjp7977 2003-04-04
  • 打赏
  • 举报
回复
在线等待,希望得到您的高见!!
sjp7977 2003-04-04
  • 打赏
  • 举报
回复
在下愚昧,请问hahu(dragon),怎么实现多级关联呢?
请问oldsky(九指神丐) 什么是RS技术呢,应该怎么实现呢?
oldsky 2003-04-04
  • 打赏
  • 举报
回复
利用RS技术应该可以解决多级联动问题,它它解决了与服务器的远程通信问题,可以保证该页面毫无任何刷新迹象.
hahu 2003-04-04
  • 打赏
  • 举报
回复
两级关联的实现
参数主要包括,到数据库的连接,当前返回的上一级,当前级
<%function getclasslist(conn,subjectid,nowselect)
if not nowselect="" then
if not isnumeric(nowselect) then
call nerror(-4)
else selindex=cint(nowselect)
end if
end if

result="<option>--==先选择专业==--</option>"
if not subjectid="" then
if not isnumeric(subjectid) then
call nerror(-4)
end if
sql="select * from CLASS where DUSER is null and SID="&subjectid
call crecset(sql,conn,rs4,0,1)
if rs4.eof then
result="<option>没有创建班级</option>"
else
result=""
do while not rs4.eof
str=""
if selindex=rs4("ID") then
str="selected"
end if
result=result&"<option value='"&rs4("ID")&"' "&str&">"&rs4("CNAME")&"</option>"
rs4.movenext
loop
call srecset(rs4)
end if
end if
getclasslist=result
end function

function gettermlist(conn,cid)
result="<option>无</option>"
if not cid="" then
if not isnumeric(cid) then
call nerror(-4)
end if
sql="select * from CLASS where DUSER is null and ID="&cid
call crecset(sql,conn,rs4,0,1)
if rs4.eof then
result="<option>ERROR</option>"
else
result=""
for temnum=1 to 8
if not rs4("term"&cstr(temnum)) then
result=result&"<option value='"&temnum&"'>"&temnum&"</option>"
end if
next
call srecset(rs4)
end if
end if
gettermlist=result
end function
%>
<select name="select" class="sel" onChange="javascript:window.location.href='thepage.asp?sid='+
this.options[this.selectedIndex].value">
<%if request.Form("sid")="" then%>
<option value="" selected>请先选择专业</option>
<%end if%>
<%=subjectlist(conn2,request.Form("sid"))%>
</select>
<br>
班级:
<select name="classid" class="sel" >
<%if request.Form("sid")="" then%>
<option value="" selected>请先选择专业</option>
<%end if%>
<%=getclasslist(conn2,request.Form("sid"),"")%>
</select>

28,391

社区成员

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

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