怎样根据第一个下拉列表框的选择确定第二个下拉列表框多显示的内容

时间:2022-11-03 10:12:20
在做网页时,碰到一个问题,就是在做注册界面的时候,要求用户选择省份以及省份所对应的城市,也就是要两个下拉框,当用户在选择了第一个下拉框中的省份的时候,第二个框中自动显示该省份所对应的城市。现在已知所有省份的名称和城市的名称都存放在数据库中。怎样实现上述功能呢?
  
    各位高人能不能给出具体代码或者最好阐述一下思路,然后给出伪代码。多谢!

5 个解决方案

#1


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>11</TITLE>
<%dim conn
 set conn=server.CreateObject("adodb.connection")
     conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("bshujif.mdb")
 sqlstr="select * from sort"
 set rs=conn.execute(sqlstr)

  set rs1=server.CreateObject("adodb.recordset")
    sqlstr1 = "select * from nsort order by sort_id desc"
    set rs1 = conn.execute(sqlstr1)
%>
<script language = "JavaScript">
var onecount;
onecount=0;
subcat = new Array();
    <%
        CountLinkAction = 0
    do while not rs1.eof 
%>
    subcat[<%=CountLinkAction%>] = new Array("<%= trim(rs1("nsort_name"))%>","<%= trim(rs1("sort_id"))%>");
<%
CountLinkAction = CountLinkAction + 1
rs1.movenext
    loop
    rs1.close
    set rs1=nothing
    %>
onecount=<%=CountLinkAction%>;

function changelocation(locationid)
{
    document.form1.nsort.length = 0; 
    var locationid=locationid;
    var i;
    document.form1.nsort.options[0] = new Option('选择小类','');
    for (i=0;i < onecount; i++)
        {
            if (subcat[i][1] == locationid)
            { 
                document.form1.nsort.options[document.form1.nsort.length] = new Option(subcat[i][0], subcat[i][0]);
            }        
        }

}    
</script>
</HEAD>

<BODY>
<form name="form1" method="post" action="">
  <select name="sort" onChange="changelocation(document.form1.sort.options[document.form1.sort.selectedIndex].value)">
    <option selected>大类</option>
<%while rs.eof<>true 
 response.write("<option value="&rs("sort_id")&">"&rs("sort_name")&"</option>")
 rs.movenext
 wend%>
  </select>
  <select name="nsort" id="nsort">
    <option selected>小类</option>
  </select>
</form>
</BODY>
</HTML>

=============
数据库2个表,一个存放一级菜单,另一个存放二级

#2


在第一个select里面加入onmark函数,当第一个select 发生变化的时候,利用javascript来写onmark 函数,得到相应的变化值,这是我做jsp时的思路,不过写asp也应该可以这样实现

#3


把数据按省份排序,每个省份下的城市的名称和ID分别放在Name和ID的隐藏控件,由于是多个省,就成了两个数组,名称分别是Name和ID,然后当第一个Select 变化时用OnChange事件读取对应ID[i],Name[i]的值。然后就可以显示出来了。

如果像一楼所说的,每一次变化就要读一次数据库,访问量大的时候服务器可能会Over的。所以还是一次读出来的好,{个人见意}

#4


把数据按省份排序,每个省份下的城市的名称和ID分别放在Name和ID的隐藏控件,由于是多个省,就成了两个数组,名称分别是Name和ID,然后当第一个Select 变化时用OnChange事件读取对应ID[i],Name[i]的值。然后就可以显示出来了。

如果像一楼所说的,每一次变化就要读一次数据库,访问量大的时候服务器可能会Over的。所以还是一次读出来的好,{个人见意}

#5


前几天在做练习的时候,有练习你说的这块的问题:下拉联动。
做法是:
数据库中有一张表,表结构为:id,name,father_id.
id字段自增,name字段中存放所有省市的名称,father_id数字型,对应name中的省市名称,如果是省,则其为0,若为市,则它的father_id值为所在省的id.
通过while循环将省的名称存放select1中,option中的value值等于记录集中的id字段的值。
在点击select1时,提交表单,通过request取得其值,写SQL语句得到新的记录集,再通过循环将该省中的城市名称存放入select2中。

#1


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>11</TITLE>
<%dim conn
 set conn=server.CreateObject("adodb.connection")
     conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("bshujif.mdb")
 sqlstr="select * from sort"
 set rs=conn.execute(sqlstr)

  set rs1=server.CreateObject("adodb.recordset")
    sqlstr1 = "select * from nsort order by sort_id desc"
    set rs1 = conn.execute(sqlstr1)
%>
<script language = "JavaScript">
var onecount;
onecount=0;
subcat = new Array();
    <%
        CountLinkAction = 0
    do while not rs1.eof 
%>
    subcat[<%=CountLinkAction%>] = new Array("<%= trim(rs1("nsort_name"))%>","<%= trim(rs1("sort_id"))%>");
<%
CountLinkAction = CountLinkAction + 1
rs1.movenext
    loop
    rs1.close
    set rs1=nothing
    %>
onecount=<%=CountLinkAction%>;

function changelocation(locationid)
{
    document.form1.nsort.length = 0; 
    var locationid=locationid;
    var i;
    document.form1.nsort.options[0] = new Option('选择小类','');
    for (i=0;i < onecount; i++)
        {
            if (subcat[i][1] == locationid)
            { 
                document.form1.nsort.options[document.form1.nsort.length] = new Option(subcat[i][0], subcat[i][0]);
            }        
        }

}    
</script>
</HEAD>

<BODY>
<form name="form1" method="post" action="">
  <select name="sort" onChange="changelocation(document.form1.sort.options[document.form1.sort.selectedIndex].value)">
    <option selected>大类</option>
<%while rs.eof<>true 
 response.write("<option value="&rs("sort_id")&">"&rs("sort_name")&"</option>")
 rs.movenext
 wend%>
  </select>
  <select name="nsort" id="nsort">
    <option selected>小类</option>
  </select>
</form>
</BODY>
</HTML>

=============
数据库2个表,一个存放一级菜单,另一个存放二级

#2


在第一个select里面加入onmark函数,当第一个select 发生变化的时候,利用javascript来写onmark 函数,得到相应的变化值,这是我做jsp时的思路,不过写asp也应该可以这样实现

#3


把数据按省份排序,每个省份下的城市的名称和ID分别放在Name和ID的隐藏控件,由于是多个省,就成了两个数组,名称分别是Name和ID,然后当第一个Select 变化时用OnChange事件读取对应ID[i],Name[i]的值。然后就可以显示出来了。

如果像一楼所说的,每一次变化就要读一次数据库,访问量大的时候服务器可能会Over的。所以还是一次读出来的好,{个人见意}

#4


把数据按省份排序,每个省份下的城市的名称和ID分别放在Name和ID的隐藏控件,由于是多个省,就成了两个数组,名称分别是Name和ID,然后当第一个Select 变化时用OnChange事件读取对应ID[i],Name[i]的值。然后就可以显示出来了。

如果像一楼所说的,每一次变化就要读一次数据库,访问量大的时候服务器可能会Over的。所以还是一次读出来的好,{个人见意}

#5


前几天在做练习的时候,有练习你说的这块的问题:下拉联动。
做法是:
数据库中有一张表,表结构为:id,name,father_id.
id字段自增,name字段中存放所有省市的名称,father_id数字型,对应name中的省市名称,如果是省,则其为0,若为市,则它的father_id值为所在省的id.
通过while循环将省的名称存放select1中,option中的value值等于记录集中的id字段的值。
在点击select1时,提交表单,通过request取得其值,写SQL语句得到新的记录集,再通过循环将该省中的城市名称存放入select2中。