标题:怎样使两个下拉菜单关联起来啊?
只看楼主
downdown
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2005-6-20
 问题点数:0 回复次数:13 
怎样使两个下拉菜单关联起来啊?
怎样使两个下拉菜单关联起来啊? 就像这样
<select name="select" size="1"> <option selected>请选择省</option> </select> <select name="select" size="1"> <option selected>请选择城市</option> </select>
搜索更多相关主题的帖子: 菜单 
2005-07-29 16:41
downdown
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2005-6-20
得分:0 
选择了省后,第二个列表才能显示所选省中的城市
怎样实现?先谢了!
2005-07-29 16:43
downdown
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2005-6-20
得分:0 
em08]

[此贴子已经被作者于2005-7-29 17:47:41编辑过]


2005-07-29 17:31
myliumin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-7-30
得分:0 
转贴,请问是ASP代码吗?如果是动态的.那么我转一个贴子过来给你看.


想了好久得出的方法,想着很多人都为此问题得不到解决而苦恼,本着代码共享的原则,现公布出来供大家指正(其实不说出来我也难受)。如果您觉得不错请帮忙提提前,好让更多的朋友看到。

此方法绝不是事先将所有记录都写入到页面中再通过脚本过滤,那样虽然简单,但对于大的数据量显然就不适合了,而且还严重浪费资源。

将下面的代码稍作修改即可应用于其它地方,非常方便。

为测试用,先建一名 Test.mdb 的 Access2000 数据库,建立两个表 Type,Title,结构如下:
Type
******************
ID    自动编号,主键
名称  文本,长度合适

Title
********************
ID    自动编号,主键
类别  长整形数字,并联 Type 表的 ID 字段
标题  文本,长度合适

我们的目的是从 Type 表中读取记录并写入到第一个列表框中,并在第一个列表框选择时从 Title 表中过滤出相应记录写入到第二个列表框中,并且可以随时获得第二列表框所选的值。

关键:在 B.asp 放置一隐藏域,来存放第二列表框所选的值,在 A.asp 中通过脚本来访问该隐藏域的值来达到跨页面读取数值的目的。

'********************************************************
'  conn.asp   连接数据库,这里用 test.mdb 来作测试
'********************************************************
&lt;%
    dim conn
    dim connstr

    Set conn = Server.CreateObject("ADODB.Connection")
    connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("/test.mdb")
    conn.Open connstr
%&gt;

'********************************************************
'  A.asp   主页面,内嵌 B.asp(第二列表框在B.asp页面)
'********************************************************
&lt;!--#include file="conn.asp"--&gt;

&lt;table&gt;
    &lt;tr&gt;&lt;td&gt;
   
    &lt;form method="POST" action=""&gt;
&lt;%
  
    Dim I,FirstID
    I=1
    Set Rs= Server.CreateObject("ADODB.Recordset")
    SQL="SELECT * FROM Type;"
    RS.Open SQL,Conn,1,1
   
    Response.Write "第一列表框 &lt;select size='1' ID='A' name='A' OnChange='VBScript:ChangType'&gt;"
   
    DO While Not RS.Eof
        Response.Write "&lt;option value='" &amp; RS("ID") &amp; "'&gt;" &amp; RS("名称") &amp; "&lt;/option&gt;"
        RS.MoveNext
    Loop
   
    Response.Write "&lt;/select&gt;"
%&gt;
&lt;P&gt;&lt;IFRAME HEIGHT="22" WIDTH="300" FRAMEBORDER=NO MARGINHEIGHT=0 SRC="B.asp?ID=1" ID="TitleFrame"&gt;&lt;/IFRAME&gt;&lt;/P&gt;
&lt;P&gt;&lt;input type='button' onclick='vbscript:Show.innerText="选择的值是:" &amp; Document.Frames(0).Document.All.H.value' value='查看第二列表框所选值'&gt;&lt;/P&gt;
&lt;/Form&gt;
    &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td ID="Show"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;Script Language=VBScript&gt;
  Sub ChangType
    TitleFrame.Location.Replace("B.asp?ID=" &amp; Document.All.A.Value)
  End Sub
&lt;/Script&gt;

&lt;%
RS.Close
Set RS=Nothing
Conn.Close
Set Conn=Nothing
%&gt;

'********************************************************
'  B.asp   第二列表框所在页面,内嵌于 A.asp
'********************************************************
&lt;!--#include file="Conn.asp"--&gt;
&lt;%
    TypeID=Trim(Request.QueryString("ID"))

      Dim RS
      Set RS= Server.CreateObject("ADODB.Recordset")
      SQL="SELECT * FROM Title Where 类别=" &amp; TypeID &amp; ";"
      RS.Open SQL,Conn,1,1
      
        Response.Write "第二列表框 &lt;select size='1' name='B' ID='B' OnChange='H.value=this.options[this.selectedIndex].value'&gt;"
      
      Do While Not RS.Eof
          Response.Write "&lt;option value='" &amp; RS("ID") &amp; "'&gt;" &amp; RS("标题") &amp; "&lt;/option&gt;"
        RS.MoveNext
      Loop
      
      Response.Write "&lt;/select&gt;"
      
      RS.Close
      Set RS=Nothing
      Conn.Close
      Set Conn=Nothing
%&gt;
&lt;input type="hidden" name="H"&gt;
&lt;script Language="vbscript"&gt;
H.value=B.options(B.selectedIndex).value
&lt;/script&gt;
2005-07-30 21:08
toolag
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2005-7-30
得分:0 
http://jiarry.blogchina.com/1258283.html http://www.blueidea.com/bbs/NewsDetail.asp?id=529631 http://www.21class.com/kehu/form/HTMLPage1.htm 非常详细,自己看看吧 如果你足够细心的话, 你会发现,本bbs 就有这个功能, 请 看 http://www.bc-cn.net/bbs/mymodify.asp 个人真实信息 的 省份/城市

[此贴子已经被作者于2005-7-31 0:29:47编辑过]


VB, Delphi, ASP, PHP, JSP, .NET MS SQL, My SQL, Oracle Diablo, StarCraft, WarCraft, World of Warcraft
2005-07-31 00:14
downdown
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2005-6-20
得分:0 
现在才看到回贴.谢谢楼上两位!
十分感谢!

[此贴子已经被作者于2005-8-1 16:11:41编辑过]


2005-08-01 15:10
downdown
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2005-6-20
得分:0 
再请教一下myliumin
我要做的是四级联动的,用你的那种方法行得通吗?
 用哪种方法更好呢?
2005-08-01 16:15
toolag
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2005-7-30
得分:0 
myliumin的 iframe做法, 你可以应用到N级啊, 你可以多几个iframe, changetype增加 targetframe属性,iframe1联动后续frame等,但是不推荐那样做 我上面回复的 http://www.21class.com/kehu/form/HTMLPage1.htm 有 非frame JS n级联动 的 演示 和代码

VB, Delphi, ASP, PHP, JSP, .NET MS SQL, My SQL, Oracle Diablo, StarCraft, WarCraft, World of Warcraft
2005-08-01 16:28
downdown
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2005-6-20
得分:0 
我看呢!等会儿再请教!
2005-08-01 16:48
downdown
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2005-6-20
得分:0 
感觉还是myliumin的好一点,因为我的数据是从库里调的,这样也便于后台管理.
myliumin能不能做一个简单的四级联动的,感觉挺麻烦的.帮帮忙吧!
谢谢!
2005-08-01 18:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-23950-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051015 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved