yrf_123 2021-08-23 19:35 采纳率: 100%
浏览 50
已结题

请慷慨赐予ACCESS数据库为一张表的ASP三级联动代码

ACCESS数据库,表table,字段:id;name_1;name_2;name_3,name_2是name_1的下级,name_3是name_2的下级。要求:根据下拉框name_1联动选择name_2,再根据下拉框name_2联动选择name_3。本人百度了很多三级联动,极少有一张表的三级联动,且本人难理解。盼各位能不吝赐教,赐予完整的一张表的ASP三级联动代码,需要无页面刷新。非常感谢!

  • 写回答

4条回答 默认 最新

  • CSDN专家-showbo 2021-08-23 21:53
    关注

    可以读出所有数据生成js数组发送到客户端,然后js处理下,逻辑大概如下,注意读取数据库生成数组的项要放到asp文件中,不能放js文件中,js文件中的asp代码不会被解析,不过你这个数据库建立得有点无语。。。有帮助麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~

    img

    
    <%@ language="vbscript" codepage="65001" %>
    <meta charset="utf-8" />
    <script>
        var arr = [];///以下asp代码生成js数组用
    <%
    set conn=server.CreateObject("adodb.connection")
    conn.Open "provider=microsoft.jet.oledb.4.0;data source=数据库物理路径"
    set rs=conn.Execute("select * from [table]")
    while not rs.eof
    %>
        arr.push(["<%=rs("id") %>","<%=rs("name_1") %>","<%=rs("name_2") %>","<%=rs("name_3") %>"]);
    <%
        rs.movenext
    wend
    rs.close:set rs=nothing
    conn.close:set conn=nothing
    %>
    </script>
    一级:<select id="s1"></select>
    二级:<select id="s2"></select>
    三级:<select id="s3"></select>
    <script type="text/javascript">
        //////////////////////////////测试数据,记得删除
        arr.push([1, 'name1', 'name1-1', 'name1-1-1']);
        arr.push([1, 'name1', 'name1-1', 'name1-1-2']);
        arr.push([1, 'name1', 'name1-2', 'name1-2-1']);
        arr.push([1, 'name1', 'name1-2', 'name1-2-2']);
        arr.push([1, 'name2', 'name2-1', 'name2-1-1']);
        arr.push([1, 'name2', 'name2-2', 'name2-2-1']);
        //////////////////////////////
        //js处理数据成需要格式
        var kv = {}, s = '', key1, key2;
        for (var v of arr) {
            key1 = v[1];
            key2 = key1 + '-' + v[2];
            if (!kv[key1]) {
                s += '<option>' + v[1] + '</option>';//1级
                kv[key1] = [];//存储1级对应的2级选项
            }
            if (!kv[key2]) {
                kv[key1].push(v[2]);
                kv[key2] = []//存2级对应的3级
            }
            kv[key2].push(v[3]);
        }
        var s1 = document.getElementById('s1'), s2 = document.getElementById('s2'), s3 = document.getElementById('s3');
    
        s1.innerHTML = s;
        s2.onchange = function () {
            s3.innerHTML = kv[s1.value + '-' + s2.value].map(i => '<option>' + i + '</option>').join('');
        };
        s1.onchange = function () {
            s2.innerHTML = kv[s1.value].map(i => '<option>' + i + '</option>').join('');
            s2.onchange();
        };
        s1.onchange();
    </script>
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月23日

悬赏问题

  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因