精华内容
下载资源
问答
  • javascript下拉联动

    2012-10-06 11:36:12
    javascript下拉联动,简单明了,详细解析
  • EXCEL二级下拉联动菜单制作,很实用的例子,供需要的朋友下载
  • 主要为大家详细介绍了基于js实现二级下拉联动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了Bootstrap select下拉联动,JQuery插件之cxselect,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了JS实现省市县三级下拉联动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了Ajax+Servlet实现无刷新下拉联动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了js select下拉联动的相关资料,更具级联性!具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • dwr无限极下拉联动(运行6级下拉联动效果演示含说明,数据库数据来源于数据库中 这里为一个视频演示程序,有什么疑问可以留言。 这个视频是一个avi的文件,压缩后不到8M,源文件有500M,需要看看的朋友可以下载。
  • POI代码实现excel二级下拉联动 一级下拉 二级下拉 核心思想 1、sheet页area0中放数据 一个一级下拉(差旅报销单)对应两个二级下拉(费用明细、出差目的) 第一列放差旅报销单+费用明细,后面的几列放费用...

    POI代码实现excel二级下拉联动
    一级下拉
    在这里插入图片描述
    在这里插入图片描述

    二级下拉
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    核心思想
    1、sheet页area0中放数据
    一个一级下拉(差旅报销单)对应两个二级下拉(费用明细、出差目的)
    第一列放差旅报销单+费用明细,后面的几列放费用明细的具体内容
    2、名称管理器
    在这里插入图片描述

    3、设置数据有效性

    在这里插入图片描述
    =INDIRECT($D7&“费用明细”)
    括号里面的是名称管理器的名称“差旅报销单费用明细”
    一级下拉选中“差旅报销单”二级下拉费用明细就是“差旅报销单费用明细”的内容。

    代码实现

    for (i = 0; i < kzGrop.size(); i++) {
                List<Map> kzGropList = (List<Map>) kzGrop.get(i);
                kzgrop = kzGropList.size();
                //变动行
                rowId = 0;
                area = "area"+i;
                HSSFSheet hideSheet = workbook.createSheet(area);
                //将此sheet隐藏
                workbook.setSheetHidden(workbook.getSheetIndex(hideSheet), true);
                Row fymxRow = hideSheet.createRow(rowId++);
                fymxRow.createCell(0).setCellValue("列表");
                for (h = 0;h < kzgrop;h++) {
                    String F_XSMC = (String) kzGropList.get(h).get("F_XSMC");
                    for (k = 0; k < fymxSize; k++) {
                        ywlx = (String) FYMXList.get(k).get("F_YWLX");
                        if (ywlx.equals(kzGropList.get(h).get("F_YWLX"))) {
                            ywlxmc = (String) FYMXList.get(k).get("F_YWLXMC");
                            mcList.add(ywlxmc + F_XSMC);
                            Map tableInfo = ospService.queryTableInfo((String) kzGropList.get(h).get("F_TABN"));
                            BHCol = (String) tableInfo.get("DCT_BMCOLID");
                            MCCol = (String) tableInfo.get("DCT_MCCOLID");
                            COLUMN = BHCol + "," + MCCol;
                            WHERE = (String) kzGropList.get(h).get("F_TJ");
                            WHERE = ospService.replaceSqlParam(WHERE, userInfo);
                            List<Map> KZXXMxList = ospService.queryByOSP((String) kzGropList.get(h).get("F_TABN"), COLUMN, WHERE);
                            int Size = KZXXMxList.size();
                            Row row = hideSheet.createRow(rowId++);
                            row.createCell(0).setCellValue(ywlxmc + F_XSMC);
                            for (j = 0; j < Size; j++) {
                                Cell cell = row.createCell(j + 1);
                                cell.setCellValue((String) KZXXMxList.get(j).get(MCCol));
                            }
                            // 添加名称管理器
                            String range = getRange(1, h+2, Size);
                            Name name = workbook.createName();
                            //key不可重复,将父区域名作为key
                            name.setNameName(ywlxmc + F_XSMC);
                            String formula = area+"!" + range;
                            name.setRefersToFormula(formula);
                        }
                    }
                }
                for (int f = 0; f < mcList.size(); f++) {
                    Cell fymxCell = fymxRow.createCell(f + 1);
                    fymxCell.setCellValue((String) mcList.get(f));//第一行“列表”后面的业务类型名称
                }
                mcList.clear();
            }
            for(i = 0;i<kzDedu.size();i++){
                HSSFCell kzxxcell = row1.createCell(++col);
                kzxxcell.setCellValue("");
                kzxxcell.setCellStyle(style);
                String XSMC = (String) kzDedu.get(i).get("F_XSMC");
                String num = numberToLetter(ywlxcol+1);//数字转字母1-A
                //对D7行设置有效性
                setDataValidation(num, sheet, index, col,ywlxrow,XSMC);
            }
    
    /**
         *  计算formula
         * @param offset 偏移量,如果给0,表示从A列开始,1,就是从B列
         * @param rowId 第几行
         * @param colCount 一共多少列
         * @return 如果给入参 1,1,10. 表示从B1-K1。最终返回 $B$1:$K$1
         *
         */
        public String getRange(int offset, int rowId, int colCount) {
            char start = (char)('A' + offset);
            if (colCount <= 25) {
                char end = (char)(start + colCount - 1);
                return "$" + start + "$" + rowId + ":$" + end + "$" + rowId;
            } else {
                char endPrefix = 'A';
                char endSuffix = 'A';
                if ((colCount - 25) / 26 == 0 || colCount == 51) {// 26-51之间,包括边界(仅两次字母表计算)
                    if ((colCount - 25) % 26 == 0) {// 边界值
                        endSuffix = (char)('A' + 25);
                    } else {
                        endSuffix = (char)('A' + (colCount - 25) % 26 - 1);
                    }
                } else {// 51以上
                    if ((colCount - 25) % 26 == 0) {
                        endSuffix = (char)('A' + 25);
                        endPrefix = (char)(endPrefix + (colCount - 25) / 26 - 1);
                    } else {
                        endSuffix = (char)('A' + (colCount - 25) % 26 - 1);
                        endPrefix = (char)(endPrefix + (colCount - 25) / 26);
                    }
                }
                return "$" + start + "$" + rowId + ":$" + endPrefix + endSuffix + "$" + rowId;
            }
        }
    
    /**
         * 数字转字母 1-26 : A-Z
         * @param num
         * @return
         */
        private static String numberToLetter(int num) {
            if (num <= 0) {
                return null;
            }
            String letter = "";
            num--;
            do {
                if (letter.length() > 0) {
                    num--;
                }
                letter = ((char) (num % 26 + (int) 'A')) + letter;
                num = (int) ((num - num % 26) / 26);
            } while (num > 0);
    
            return letter;
        }
    
     /**
         * 设置有效性
         * @param offset 主影响单元格所在列,即此单元格由哪个单元格影响联动
         * @param sheet
         * @param rowNum 行数
         * @param colNum 列数
         */
        public static void setDataValidation(String offset,HSSFSheet sheet, int rowNum,int colNum,int ywlxrow,String XSMC) {
            HSSFDataValidationHelper dvHelper = new HSSFDataValidationHelper(sheet);
            DataValidation data_validation_list;
            XSMC = "\""+XSMC+"\"";
    //        1 = 7-6    ywlxrow-5
            ywlxrow = ywlxrow-5;
            String indirect = "INDIRECT($" + offset + ywlxrow +"&"+XSMC+")";
            data_validation_list = getDataValidationByFormula(indirect, rowNum, colNum,dvHelper);
            sheet.addValidationData(data_validation_list);
        }
    
        /**
         * 加载下拉列表内容
         * @param formulaString
         * @param naturalRowIndex
         * @param naturalColumnIndex
         * @param dvHelper
         * @return
         */
        private static  DataValidation getDataValidationByFormula(
                String formulaString, int naturalRowIndex, int naturalColumnIndex, HSSFDataValidationHelper dvHelper) {
            // 加载下拉列表内容
            // 举例:若formulaString = "INDIRECT($A$2)" 表示规则数据会从名称管理器中获取key与单元格 A2 值相同的数据,
            //如果A2是一级,那么此处就是二级信息。
            DataValidationConstraint dvConstraint = (DataValidationConstraint) dvHelper.createFormulaListConstraint(formulaString);
            // 设置数据有效性加载在哪个单元格上。四个参数分别是:起始行、终止行、起始列、终止列
            int firstRow = naturalRowIndex;
            int lastRow = naturalRowIndex;
            int firstCol = naturalColumnIndex;
            int lastCol = naturalColumnIndex;
            CellRangeAddressList regions = new CellRangeAddressList(firstRow,lastRow, firstCol, lastCol);
            // 数据有效性对象 绑定
            HSSFDataValidation data_validation_list = (HSSFDataValidation) dvHelper.createValidation(dvConstraint, regions);
            return data_validation_list;
        }
    

    在这里插入图片描述

    截取了项目中部分代码,带着部分业务逻辑,凑活看

    参考文献:
    https://blog.csdn.net/wed840313/article/details/7546134
    http://club.excelhome.net/thread-1383806-1-1.html

    展开全文
  • MVC多级下拉联动,带编辑功能

    热门讨论 2015-06-05 15:25:00
    MVC多级下拉联动,带编辑功能 ,博客介绍地址:http://www.cnblogs.com/jys509/p/4554688.html
  • 《Jquery中Ajax实现下拉列表联动》由会员分享,可在线阅读,更多相关《Jquery中Ajax实现下拉列表联动(4页珍藏版)》请在人人文库网上搜索。1、Jquery中Ajax实现下拉列表联动(转载)【Js代码如下】:$(function() ...

    《Jquery中Ajax实现下拉列表联动》由会员分享,可在线阅读,更多相关《Jquery中Ajax实现下拉列表联动(4页珍藏版)》请在人人文库网上搜索。

    1、Jquery中Ajax实现下拉列表联动(转载)【Js代码如下】:$(function() BindUnit(); Change(); );/下拉列表change事件function Change() $(#sel_unit).change(function() BindUnit_User(); );function BindUnit() $.ajax( type: POST, contentType: application/json, url: WebService.asmx/GetUnitDS, data: , /即使参数为空,也需要设置 dataType: xml, /返回的类型为XML。

    2、 success: function(result) /成功时执行的方法/捕获处理过程中的异常并输出 try $(#sel_unit).empty(); $(result).find(Table).each(function(i) $(#sel_unit).append( + $(this).find(org_name).text() + ); );BindUnit_User();catch (e) alert(e);return;, error: function(result, status) /出错时会执行这里的回调函数 if (status = error) alert(status)。

    3、; );function BindUnit_User() var val = $(#sel_unit option:selected).val();var mydata = org_id:+val+: /格式为json的参数,这中间最麻烦,最容易出错的也是拼接Json字符串,字符型参数的值要添加引号,而且对于用户输入的文本字段要对,/等进行特殊处理/var mydata = org_id:val:这种方式是错误的,会报“无效的JS基元”之类的错误。不过也可直接用$.toJSON(mydata )即可;参照jQuery的JSON插件:http:/code.google.com/p/jquery-。

    4、json/ var thing =plugin: jquery-json, version2.2;/ var encoded=$.toJSON (thing);/plugin:jquery-json,version:2.2/ var name =$.evalJSON (encoded). plugin; /jquery-json/ var version = $.evalJSON(encoded).version;/ 2.2 $.ajax( type: POST,contentType: application/json,url: WebService.asmx/GetUnitUserDS,d。

    5、ata: mydata, /传递给webservice方法的参数dataType: xml, /返回的类型为XMLsuccess: function(result) /成功时执行的方法/捕获处理过程中的异常并输出try $(#sel_unit_user).empty(); /清空下拉列表/遍历结果集,“Table”是结果集XML中节点名称,可以用fireBug查看$(result).find(Table).each(function(i) $(#sel_unit_user).append( + $(this).find(oru_name).text() + ););/ if (typeof (。

    6、values) = string) / $(#sel_unit_user optionvalue= + values + ).attr(selected, true)/ catch (e) alert(e);return;,error: function(result, status) /出错时会执行这里的回调函数 if (status = error) alert(status);); 【WebService】:/返回DataSet需要设置,结果集将以XML格式返回客户端System.Web.Script.Services.ScriptMethod(ResponseFormat = Syst。

    7、em.Web.Script.Services.ResponseFormat.Xml) WebMethodpublic DataSet GetUnitUserDS(string org_id)Test obj = new Test();return obj.GetUnitUser(Convert.ToInt32(org_id);System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Xml)WebMethodpublic DataSet GetUnitDS()Test obj = new Test();return obj.GetUnit();【下拉列表控件】OUOUU注意:var date = $(#txt_date).val();/html控件用此种方式取值,设置控件idvar date = $(#).val();/服务器控件并且套用了母版页用此种方式var date = $(.txt_date).val();/针对服务器控件还可设置控件的CssClass为txt_date,再用$(.txt_date).val()获取值。

    展开全文
  • 基于jquery的N级下拉联动,例子里面实现了3级联动,可以自己扩展
  • dwr下拉联动的例子

    2008-12-10 12:26:34
    dwr下拉联动例子 选择省份 查询市 以后还有相关资料上传
  • Ext下拉联动遇到的问题 业务需求: 1、下拉是动态配置的(根据不同部门配置不同的产品); 2、需要对下拉设置默认值(默认值有一定的排序规则); 3、受另外一个勾选框的影响,勾选之后,下拉的值会变化,比如:...

    Ext下拉联动遇到的问题

    业务需求:
    1、下拉是动态配置的(根据不同部门配置不同的产品);
    2、需要对下拉设置默认值(默认值有一定的排序规则);
    3、受另外一个勾选框的影响,勾选之后,下拉的值会变化,比如:原本下拉内容为a、b、c、d,勾选之后,变为e、f、g;
    4、此下拉框A会影响另外一个下拉框B,两者是联动的;
    5、有导入功能,可以导入单子,并且实现导入的数据和手动选择的数据一样效果;
    6、导入数据之后还不能影响页面原有事件。

    具体实现方案
    1:在store的load事件上绑定渲染,这里按照排序设置默认值,处理时在后台排序好,在前端直接设置第一条数据,js如下

       store: me.getProductTypeStore(),
       listeners: {
       change: {fn: me. onValueChange, scope: me},
       render : function(combo) { 
           combo.getStore().on( "load", function(s, r, o) {
               combo.up('panel' ).setDefaultProduct(combo,s,r,o);
           });  
       } 

    渲染方法如下:

    setDefaultProduct:function(combo,s,r,o){
       var me = this;
       var productid = me.getForm().findField('productId' );
       combo.setValue(r[0].data.dictCode);
       productid.setValue(r[0].data.id);
    }

    PS:为什么绑定在load上,因为只有在load之后,数据才能加载,也就是说store的data里面才有数据,否则数据设置不上去
    因为在load方法上加载的有事件,所以,所有页面上对此下拉的值的变动,都不能用load去加载,而需要用Jquery请求到数据进行自行组装,然后使用loadData方法加载,代码如下:

    Ext.Ajax.request({
      params:{ 'param.isxxx':'Y'},
      url: create.fullPath('xxx.action' ),
      async: true,
      success: function(response){
      json =Ext.decode(response.responseText);
      var addItems = [];
      for( var i=0;i<json.listProduct.length;i++){
          var model = Ext.create('dictionaryModel' );
          model.set( 'id', json.listProduct[i].id);
          addItems.push(model);
       }
       productTypeStore.loadData(addItems);
       if(addItems.length==0){
          me.getMainContainerPanel().getMsgUtil().showError("" );
          return;
       } else{
          productType.setValue(json.listProduct[0].productType);
          productid.setValue(json.listProduct[0].id);
       }
     }
    });

    3、因为这个下拉框有和另外一个下拉框联动,所以绑定的有change事件,在导入的时候,重新加载此下拉框以及设置下拉框的值都会触发change事件,并且,change事件是监听形式的,是异步的形式进行处理,很多时候会出现,本身导入设置的值为A,但是因为异步的load事件加载而把值改为B,又触发了下拉框的change事件,导致导入数据有误!
    这时候的处理方法是,在导入订单的时候,临时去掉可以改变下拉框的所有事件、去掉下拉框的change事件,进行复制以及其他判断,之后再绑定对应的时间,代码如下:

    form.findField( 'xxxx.xxxxxx').un({
         change: {fn: me.getMainContainerPanel().getWaybillBasicPanel().onValueChange, scope: me.getMainContainerPanel().getWaybillBasicPanel()}
    });   
    
    form.findField( 'xxxx.xxxxxx').on({
         change: {fn: me.getMainContainerPanel().getWaybillBasicPanel().onValueChange, scope: me.getMainContainerPanel().getWaybillBasicPanel()}
    });

    其中如果需要重新加载下拉框的值,则也进行jquery形式,手动loadData!
    但这样又会出现加载值触发change事件,而清除了后续的其他内容,所以我们的处理是,在导入时给予一个标示,在change事件中判断此标识是否存在,如果存在,则不处理change,否则就处理,并且在导入逻辑完成后,清除这个标识,这段判断写在了ajax方法里面,是为了让这块逻辑同步执行,避免触发change事件时,这里因为没有走完,而导致值加载错误的问题。这个就不帖代码了。

    展开全文
  • Ajax二级下拉联动

    2019-03-25 20:09:29
    Ajax二级下拉联动 昨天学习入门了Ajax,利用Ajax从后台取到一些数据信息,以及从前台提交一下数据到后台,没有明显的体会到Ajax的局部刷新,异步请求,觉得还不过瘾,所以今天学习Ajax二级下拉联动,体会一下不刷新...

    Ajax二级下拉联动

    昨天学习入门了Ajax,利用Ajax从后台取到一些数据信息,以及从前台提交一下数据到后台,没有明显的体会到Ajax的局部刷新,异步请求,觉得还不过瘾,所以今天学习Ajax二级下拉联动,体会一下不刷新页面,给观众带来的"智能"。

    一般我们在填自己的信息的时候,我们要填自己的地址,首先选择省份、再选城市、选区、等等,有没有发现,我们在选完省份的时候,会自动根据选的省份给出我们下步要选的城市、等你选好了城市、城市的各个区也自动供你选择。这是怎么做到的呢?其实就是通过AJAX来完成的。
    12
    这里我们不使用数据库,直接就是SpringBoot+Ajax。

    我们知道AJAX与服务器之间的交互常用的传输载体格式有三种:

    • HTML
    • XML
    • JSON

    省份与城市是有层级关系的,因此我们只能用XML或者JSON。SpringBoot项目使用JSON也很方便(实际项目使用json的也比较多,很少用xml了)。

    前台分析

    当用户选择了某个省份之后,是使用Ajax与服务器进行交互,那么在选择好省份之后,就出现对应的城市信息。

    • 监听下拉框变化事件
    • 只要下拉框变化就与服务器交互
    • 得到服务器返回的json数据
    • 把数据填到城市的下拉框列表中

    后台分析

    得到前台选中的省份信息,以json的格式返回相应的城市信息。

    前端代码:

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>多级联动</title>
        <link th:href="@{/bootstrap3/css/bootstrap.css}" rel="stylesheet" type="text/css">
    </head>
    <body>
    
        <select id="province" name="province">
            <option value="-1">请选择省份</option>
            <option>广东</option>
            <option>湖南</option>
        </select>
        <select id="city" name="city">
            <option>请选择城市</option>
        </select>
    
    </body>
    <script type="text/javascript" src="webjars/jquery/2.2.4/jquery.min.js"></script>
    <!--<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>-->
    <script th:src="@{/bootstrap3/js/bootstrap.js}"></script>
    <script>
        document.getElementById("province").onclick= function () {
            //定位到下拉列表,获取下拉框的值
            var index = this.selectedIndex;
            //获取下拉框值
            var province = this.options[index].innerHTML;
            //如果下拉框的值为"请选择省份",不让访问服务器
            if (province!="请选择省份"){
                //由于每次都会自动添加,因此每次在调用的时候清楚
                var citySelect = document.getElementById("city");
                //每次将option变成长度为 1,让其显示'请选择城市'
                citySelect.options.length = 1;
                $.ajax({
                    type:"POST",
                    dataType:"json",
                    url:"/getCitys",
                    data:{"province":province},
                    success:function (data) {
    
                        var result = JSON.stringify(data);//将返回的json数据转换成String
                        //得到每个城市的值
                       // alert(result);
                        for (var i=0;i<data.length;i++){
                            var city = data[i].name;
                            //动态创建option控件
                            var option = document.createElement("option");
                            //给<option> value 赋值
                            option.innerHTML = city;
                            //appendChild()方法向节点添加一个子节点,就出现后面的下拉选项
                            // 比如广东的后面一次添加广州、深圳、中山
                            citySelect.appendChild(option);
                        }
                    }
                });
            }
        }
    </script>
    </html>
    

    后台代码:

    @Controller
    public class SelctctCityController {
        @GetMapping("/selectCity")
        public String selectCity(){
            return "selectCity";
        }
    
        List<City> cities;
    
        @RequestMapping("/getCitys")
        @ResponseBody
        public List<City> getCitys(HttpServletRequest request){
            cities = new ArrayList<>();
            String province = request.getParameter("province");
            System.out.println("province="+province);
            if ("广东".equals(province)){
                City city1 = new City("广州");
                City city2 = new City("深圳");
                City city3 = new City("中山");
                cities.add(city1);
                cities.add(city2);
                cities.add(city3);
            }else if ("湖南".equals(province)) {
                City city1 = new City("长沙");
                City city2 = new City("岳阳");
                City city3 = new City("湘潭");
                cities.add(city1);
                cities.add(city2);
                cities.add(city3);
            }
            System.out.println(cities);
            return cities;
        }
    }
    
    展开全文
  • 时间间隔下拉联动

    2015-11-28 14:47:58
    用JS来控制时间的下拉联动和间隔时间, 第一个下拉框选择开始时间,第二个下拉框自动显示间隔时间。 例子是间隔2个小时,具体需要间隔多少,根据需求而定:下面是代码 HTML: 下拉联动 #start, #end{ ...
  • CityPicker UIPickerView的用法之二:二级下拉联动 需要解决的BUG:pickerView的两个Component同时转动的时候,数组越界。
  • 省市区县多级下拉联动选框 我再做项目是,遇到这个问题,所以在网路上找了一个资料,觉的不错,提供给大家
  • react.js的下拉联动

    2020-11-26 10:32:14
    react.js的下拉联动 import React from 'react'; import { Row, Col, Form, Select, Input } from 'antd'; const FormItem =Form.Item; const Option=Select.Option; class Test extends React.PureComponent{ ...
  • 找不到,写了一个多级4级下拉联动,分享找不到,写了一个多级4级下拉联动,分享找不到,写了一个多级4级下拉联动,分享找不到,写了一个多级4级下拉联动,分享
  • 纯JS实现省市县三级下拉联动 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>省市县三级下拉联动-李康</title> <style> ...
  • poi excel 下拉 联动

    2013-11-20 14:32:06
    excel下拉联动http://jingyan.baidu.com/article/5553fa82035ce565a23934ba.html poi :http://blog.csdn.net/wed840313/article/details/7546134   首先准备两个方法: 创建名称管理器数...
  • JQuery的cxselect插件,实现select下拉联动
  • 菜鸟学Java——Ajax+Servlet实现无刷新下拉联动

    千次阅读 多人点赞 2013-07-29 11:09:48
    下拉联动的功能可以说非常的常用,例如在选择省、市等信息的时候;或者在选择大类、小类的时候。总之,下拉联动很常用。今天就跟大家分享一个简单的二级下拉联动的功能。   大类下拉框:页面加载的时候就初始化大...
  • H5中实现iOS的select下拉联动效果  * 网址 http://zhoushengfe.com/iosselect/website/index.html#getstarted  * github: https://github.com/zhoushengmufc/iosselect

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,932
精华内容 5,972
关键字:

下拉联动