查看: 1478|回复: 6

[求代码] 老问题了!关于省市二级联动的问题

[复制链接]
新人来了 发表于 2019-7-15 17:04:11 | 显示全部楼层 |阅读模式

我需要实现一个2级菜单但是我从网上下载了个关于省份城市的ASP代码,却发现2级 不能随一级变化,请大家指点一下!


在database1.mdb数据库中建立两个表分别为province、city。具体字段设计如下:

        Province(省)

        具体字段:id—自动编号 ProvinceName—省名 ProvinceNo—省名编号 ProvinceOrder—省排序编号




id        ProvinceName        ProvinceNo         ProvinceOrder
1         北京市        0        0
2         安徽省        1        1
3         山东省        2        2
4        江苏省         3         3


        以下省名略。

        设计思想:id是表的自动编号,ProvinceName和ProvinceNo是必须的,前者是用来存储省名,后者则是联系表city必不可少的字段。至于ProvinceOrder则是用来给省名排序的,控制下拉列表中省名出现的位置,可以省略。

        City(城市)

        具体字段:id—自动编号 CityName—市名 CityNo—市名编号 CityOrder—市排序编号 ProvinceID—所在省编号




id

CityName

CityNo

CityOrder

ProvinceID

1

北京市

1

1

0

2

合肥市

2

2

1

3

芜湖市

3

3

1

4

安庆市

4

4

1

5       
济南市

5

5

2

6       
青岛市

6

6

2



          以下市名略。

          设计思想:前面四项同Province表设计思想,ProvinceID字段将Province表和City表联系起来。

          2.设计样式及编码

         二级联动的样式很简单,在DreamWeaver 2004里向设计页面上放置两个select下拉菜单,分别取名为Province_select、City_select,它们都在名为form1的表单里。

         编码需要用到html、vbscript及javascript。首先是连接数据库,我们用常用的<!--#include file="conn.asp"-->连接。conn.asp中代码略。

        其次,用Javascript和Vbscript将Province和City表中的数据读出来并使Province_select和City_select联系起来,这一步是整个程序的关键所在。

<script language=JavaScript><%
   dim conn   
   dim connstr
   on error resume next
   connstr="DBQ="+server.mappath("1.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
     set conn=server.createobject("ADODB.CONNECTION")
     conn.open connstr
%>
         <%
         dim sql,i,j
         '//////////////////////////读出 Province 表//////////////////////////
         set rs_Province=server.createobject("adodb.recordset")
         sql="select * from Province order by ProvinceOrder"
         rs_Province.open sql,conn,1,1
         %>


         var selects=[];
         selects['xxx']=new Array(new Option('请选择城市……','xxx'));


         <%
         for i=1 to rs_s.recordcount
         %>
         

        selects['<%=rs_Province("ProvinceNo")%>']=new Array(
        <%
        '//////////////////////////读出 City 表//////////////////////////
        set rs_City=server.createobject("adodb.recordset")
        sql="select * from City where ProvinceID="&rs_Province("id")&" order by ProvinceOrder"
        rs_City.open sql,conn,1,1
        if rs_City.recordcount>0 then
           for j=1 to rs_City.recordcount
              if j=rs_City.recordcount then
        %>
      

        new Option('<%=trim(rs_City("CityName"))%>','<%=trim(rs_City("CityNo"))%>'));


        <%else%>
  

        new Option('<%=trim(rs_City("Cityname"))%>','<%=trim(rs_City("CityNo"))%>'),


        <%
        end if
        rs_City.movenext
        next
        else
        %>
        new Option('','0'));
      

        <%
        end if
        rs_City.close
        set rs_City=nothing
        rs_Province.movenext
        next
        rs_Province.close
        set rs_Province=nothing
       %>


      <!--//////////JavaScript控制联动///////////-->
      function chsel(){
         with (document.form1){
           if(province_select.value) {
                city_select.options.length=0;
                for(var i=0;i<selects[province_select.value].length;i++){
                     city_select.add(selects[province_select.value]);
    }
   }
  }
}

</script>


        <select name="Province_select" onChange=chsel()>
        <option value="xxx" selected>请选择省份……</option>
         <%
          dim tmpid  '定义一个临时变量用来记住省id
          tmpid=0
         
          set rs_Province=server.CreateObject("ADODB.recordset")
          sql="select * from Province "
          rs_Province.open sql,conn,1,1
          while not rs_Province.eof
          tmpid=rs_Province("ProvinceNo")
          response.write "tmpid"
          %>
            <option value="<%=rs_Province("ProvinceNo")%>" ><%=trim(rs_Province("ProvinceName"))%></option>
         <%
          rs_Province.movenext
          wend
          rs_Province.close
          set rs_Province=nothing
         %>
         </select>

        <!--//////////////////////////City_select下拉列表//////////////////////////-->  
         <select name="City_select">
         <%
         set rs_City=server.createobject("adodb.recordset")
         sql="select * from City where ProvinceID="&tmpid&" "
         rs_City.open sql,conn,1,1
         while not rs_City.eof
         %>
          <option value="<%=rs_City("CityNo")%>"><%=trim(rs_City("CityName"))%></option>
         <%
         rs_City.movenext
         wend
         rs_City.close
         set rs_City=nothing
        %>
        </select>     
 楼主| 新人来了 发表于 2019-7-15 17:04:52 | 显示全部楼层
  1. <script language=JavaScript><%
  2.    dim conn   
  3.    dim connstr
  4.    on error resume next
  5.    connstr="DBQ="+server.mappath("1.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
  6.      set conn=server.createobject("ADODB.CONNECTION")
  7.      conn.open connstr
  8. %>
  9.          <%
  10.          dim sql,i,j
  11.          '//////////////////////////读出 Province 表//////////////////////////
  12.          set rs_Province=server.createobject("adodb.recordset")
  13.          sql="select * from Province order by ProvinceOrder"
  14.          rs_Province.open sql,conn,1,1
  15.          %>


  16.          var selects=[];
  17.          selects['xxx']=new Array(new Option('请选择城市……','xxx'));


  18.          <%
  19.          for i=1 to rs_s.recordcount
  20.          %>
  21.          

  22.         selects['<%=rs_Province("ProvinceNo")%>']=new Array(
  23.         <%
  24.         '//////////////////////////读出 City 表//////////////////////////
  25.         set rs_City=server.createobject("adodb.recordset")
  26.         sql="select * from City where ProvinceID="&rs_Province("id")&" order by ProvinceOrder"
  27.         rs_City.open sql,conn,1,1
  28.         if rs_City.recordcount>0 then
  29.            for j=1 to rs_City.recordcount
  30.               if j=rs_City.recordcount then
  31.         %>
  32.       

  33.         new Option('<%=trim(rs_City("CityName"))%>','<%=trim(rs_City("CityNo"))%>'));


  34.         <%else%>
  35.   

  36.         new Option('<%=trim(rs_City("Cityname"))%>','<%=trim(rs_City("CityNo"))%>'),


  37.         <%
  38.         end if
  39.         rs_City.movenext
  40.         next
  41.         else
  42.         %>
  43.         new Option('','0'));
  44.       

  45.         <%
  46.         end if
  47.         rs_City.close
  48.         set rs_City=nothing
  49.         rs_Province.movenext
  50.         next
  51.         rs_Province.close
  52.         set rs_Province=nothing
  53.        %>


  54.       <!--//////////JavaScript控制联动///////////-->
  55.       function chsel(){
  56.          with (document.form1){
  57.            if(province_select.value) {
  58.                 city_select.options.length=0;
  59.                 for(var i=0;i<selects[province_select.value].length;i++){
  60.                      city_select.add(selects[province_select.value][i]);
  61.     }
  62.    }
  63.   }
  64. }

  65. </script>


  66.         <select name="Province_select" onChange=chsel()>
  67.         <option value="xxx" selected>请选择省份……</option>
  68.          <%
  69.           dim tmpid  '定义一个临时变量用来记住省id
  70.           tmpid=0
  71.          
  72.           set rs_Province=server.CreateObject("ADODB.recordset")
  73.           sql="select * from Province "
  74.           rs_Province.open sql,conn,1,1
  75.           while not rs_Province.eof
  76.           tmpid=rs_Province("ProvinceNo")
  77.           response.write "tmpid"
  78.           %>
  79.             <option value="<%=rs_Province("ProvinceNo")%>" ><%=trim(rs_Province("ProvinceName"))%></option>
  80.          <%
  81.           rs_Province.movenext
  82.           wend
  83.           rs_Province.close
  84.           set rs_Province=nothing
  85.          %>
  86.          </select>

  87.         <!--//////////////////////////City_select下拉列表//////////////////////////-->  
  88.          <select name="City_select">
  89.          <%
  90.          set rs_City=server.createobject("adodb.recordset")
  91.          sql="select * from City where ProvinceID="&tmpid&" "
  92.          rs_City.open sql,conn,1,1
  93.          while not rs_City.eof
  94.          %>
  95.           <option value="<%=rs_City("CityNo")%>"><%=trim(rs_City("CityName"))%></option>
  96.          <%
  97.          rs_City.movenext
  98.          wend
  99.          rs_City.close
  100.          set rs_City=nothing
  101.         %>
  102.         </select>     
复制代码
 楼主| 新人来了 发表于 2019-7-15 17:05:25 | 显示全部楼层
2级 不能随一级变化,请大家指点一下
ttasp 发表于 2019-7-15 17:15:50 | 显示全部楼层
新人来了 发表于 2019-7-15 17:05
2级 不能随一级变化,请大家指点一下

JS二级与四级联动菜单实例
http://bbs.ttasp.com/forum.php?m ... =8577&fromuid=3
(出处: 天天ASP家园)

参考下,实在不懂数据库发support@ttasp.COM 给你写个demo
 楼主| 新人来了 发表于 2019-7-16 10:11:00 | 显示全部楼层
ttasp 发表于 2019-7-15 17:15
JS二级与四级联动菜单实例
http://bbs.ttasp.com/forum.php?mod=viewthread&tid=8577&fromuid=3
(出处: ...

发你邮箱了
 楼主| 新人来了 发表于 2019-7-16 10:33:56 | 显示全部楼层
ttasp 发表于 2019-7-15 17:15
JS二级与四级联动菜单实例
http://bbs.ttasp.com/forum.php?mod=viewthread&tid=8577&fromuid=3
(出处: ...

数据库也发你邮箱了
xuanxiao 发表于 2019-7-16 11:36:58 | 显示全部楼层

省市联动.rar (9.65 KB, 下载次数: 2, 售价: 3 个ASP币)

Video_2019-07-16_113644.gif

参考下效果

  1. <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
  2. <%

  3. '链接数据库
  4. dim conn
  5. dim connstr

  6. connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb")
  7. set conn=server.createobject("ADODB.CONNECTION")
  8. conn.open connstr

  9. if err then
  10.         response.Write(err.number)
  11.         err.clear
  12.          conn.close
  13.          Set conn = Nothing
  14.          Response.Write "数据库连接出错,请检查数据库参数设置。"
  15.          Response.End()
  16. end if
  17. '链接数据库完成

  18. '关闭连接过程,可以随时调用
  19. sub CloseConn()
  20. conn.close
  21. set conn=nothing
  22. end Sub
  23. %>
  24. <script language=JavaScript>
  25.          <%
  26.          dim sql,i,j
  27.          '//////////////////////////读出 Province 表//////////////////////////
  28.          set rs_Province=server.createobject("adodb.recordset")
  29.          sql="select * from Province order by ProvinceOrder"
  30.          rs_Province.open sql,conn,1,1
  31.          %>

  32.          var selects=[];
  33.          selects['xxx']=new Array(new Option('请选择城市……','xxx'));

  34.          <%
  35.          for i=1 to rs_Province.recordcount
  36.          %>
  37.          

  38.         selects['<%=rs_Province("ProvinceNo")%>']=new Array(
  39.         <%
  40.         '//////////////////////////读出 City 表//////////////////////////
  41.         set rs_City=server.createobject("adodb.recordset")
  42.         sql="select * from City where ProvinceID="&rs_Province("id")&" order by CityOrder"
  43.                 'response.Write(sql)
  44. '                response.End()
  45.                
  46.         rs_City.open sql,conn,1,1
  47.         if rs_City.recordcount>0 then
  48.            for j=1 to rs_City.recordcount
  49.               if j=rs_City.recordcount then
  50.         %>
  51.       

  52.         new Option('<%=trim(rs_City("CityName"))%>','<%=trim(rs_City("CityNo"))%>'));

  53.         <%else%>
  54.   

  55.         new Option('<%=trim(rs_City("Cityname"))%>','<%=trim(rs_City("CityNo"))%>'),

  56.         <%
  57.         end if
  58.         rs_City.movenext
  59.         next
  60.         else
  61.         %>
  62.         new Option('','0'));
  63.       

  64.         <%
  65.         end if
  66.         rs_City.close
  67.         set rs_City=nothing
  68.         rs_Province.movenext
  69.         next
  70.         rs_Province.close
  71.         set rs_Province=nothing
  72.        %>


  73.       <!--//////////JavaScript控制联动///////////-->
  74.       function chsel(){
  75.          with (document.form1){
  76.            if(province_select.value) {
  77.                 city_select.options.length=0;
  78.                 for(var i=0;i<selects[province_select.value].length;i++){
  79.                      city_select.add(selects[province_select.value][i]);
  80.     }
  81.    }
  82.   }
  83. }

  84. </script>
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表

在线客服

售前咨询
售后咨询
服务热线
023-58418553
微信公众号