• jquery实现ajax联动框 二


    另一种形式的联动框,右边的联动框用jquery生成

    这是仿照上篇的js方法修改的

    先看下页面代码:

    <tr id="sfqySelect">
            <td width="100" class="t_r prten field_c">事发区域:</td>
            <td width="131">
                <select class="building"></select>
            </td>
            <td width="10"></td>
            <td width="131">
                <input id="choose_floor" class="text_k choose_floor" type="text" value="点击选择楼层">
                <input class="choose_floor_hidden FL {validate:{required:true}}" type="hidden" name="geoareaid" value="">
                <div id="floorNum" class='floorNum'></div>
            </td>
          </tr>

    页面调用的js:

    <script type="text/javascript" src="${rc.contextPath}/js/jquery.building.js"></script>
    <script type="text/javascript">    
      $(document).ready(function(){
          $("#sfqySelect").building({
          nodata:"none",
          required:true,
          buildingUrl:'${rc.contextPath}/repair/loadBuildings',
          floorUrl:'${rc.contextPath}/repair/loadFloors',
          clickCallback:function(value,text,other){
               moveGis(other);
           }
          }); 
      });
      </script>

    对应的 jquery.building.js 文件如下:

    /*
    Ajax 三级联动
    日期:2013-2-26
    
    settings 参数说明
    -----
    buildingUrl:大楼下拉数据获取URL,josn返回
    buildingValue:默认大楼下拉value
    floorUrl:楼层数据获取URL,josn返回
    floorValue:默认楼层value
    nodata:无数据状态
    required:必选项
    clickCallback:点击时的回调函数
    ------------------------------ */
    (function($){
        $.fn.building=function(settings){
            if($(this).size()<1){return;};
            // 默认值
            settings=$.extend({
                buildingUrl:"js/city.min.js",
                floorUrl:"js/city.min.js",
                buildingValue:null,
                floorValue:null,
                nodata:null,
                required:true,
                clickCallback:function(){}
            },settings);
    
            var box_obj=this;
            var building_obj=box_obj.find(".building");
            var floor_obj=box_obj.find(".choose_floor");
            var floorHidden_obj=box_obj.find(".choose_floor_hidden");
            var floorPanel_obj=box_obj.find("#floorNum");
            var select_prehtml=(settings.required) ? "" : "<option value=''>请选择</option>";
    
            var prepareSelectHtml=function(jsonArray){
                var temp_html=select_prehtml;
                $.each(jsonArray,function(index,row){
                    temp_html+="<option value='"+row.value+"'>"+row.text+"</option>";
                });    
                return temp_html;
            };
            var prepareFloorPanelHtml=function(jsonArray){
                var temp_html='<table id="floor_table" cellpadding="0" cellspacing="0">';
                var count=0;
                $.each(jsonArray,function(index,row){
                    if(count==0){
                        temp_html+='<tr>';
                    }
                    var otherAttr="";
                    if(row.other){
                        otherAttr="other="+row.other+"";
                    }
                    temp_html+='<td '+otherAttr+' floorId='+row.value+'>'+row.text+'</td>';
                    if(count>0&&count%3==0){
                        temp_html+='</tr>';
                        count=-1;
                    }
                    count=count+1;
                });    
                temp_html+='</table>';
                return temp_html;
            };
            // 赋值二级下拉框函数
            var createFloorPanel=function(){
                floor_obj.val('点击选择楼层');
                floorHidden_obj.val('');
                //floorPanel_obj.empty();
                if(building_obj.val()==''){
                    return;
                }
                $.getJSON(settings.floorUrl, { buildingId: building_obj.val(), time: new Date().getTime() }, function(jsonResult){
                    if(!jsonResult.success){
                        if(settings.nodata=="none"){
                            floorPanel_obj.css("display","none");
                        }else if(settings.nodata=="hidden"){
                            floorPanel_obj.css("visibility","hidden");
                        };
                        return;
                    }
                    // 遍历赋值二级下拉列表
                    floorPanel_obj.html(prepareFloorPanelHtml(jsonResult.data));
                    floorPanel_obj.find('td').click(function(){
                        //hide
                        var text = $(this).html();
                        var value = $(this).attr("floorId");
                        var other =$(this).attr("other");
                        floor_obj.val(text);
                        floorHidden_obj.val(value);
                        floorPanel_obj.css("display","none");
                        settings.clickCallback(value,text,other);
                    });
                    /*$('body').filter('.choose_floor').click(function(){
                        alert(1)
                        floorPanel_obj.css("display","none");
                    });    */
                });
                
    
            };
    
    
            var init=function(){
                // 遍历赋值一级下拉列表
                $.getJSON(settings.buildingUrl, {time: new Date().getTime() }, function(jsonResult){
                    if(!jsonResult.success){
                        return;
                    }
                    // 遍历赋值一级下拉列表
                    building_obj.html(prepareSelectHtml(jsonResult.data));    
                    createFloorPanel();
                    // 若有传入大楼与楼层的值,则选中。(setTimeout为兼容IE6而设置)
                    setTimeout(function(){
                        if(settings.buildingValue && settings.buildingValue.length>0){
                            building_obj.val(settings.buildingValue);
                            createFloorPanel();
                            setTimeout(function(){
                                if(settings.floorValue!=null){
                                    floor_obj.val(settings.floorValue);
                                };
                            },1);
                        };
                    },1);
                });
    
                // 选择一级时发生事件
                building_obj.bind("change",function(){
                    createFloorPanel();
                });
    
                floor_obj.click(function(){
                    //show
                    //alert(floorPanel_obj.html())
                    //floorPanel_obj.css("height","100px");
                    //floorPanel_obj.css("width","100px");
                    //floorPanel_obj.css('floorNum');
                    floorPanel_obj.css("display","block");
                });
            };
    
            // 初始化第一个下拉框
            init();
        };
    })(jQuery);

    后台处理请求及返回json数据:

    @RequestMapping("loadBuildings")
        @ResponseBody
        public Map<String, Object> loadBuildings(ModelMap model){
               String msg = "";
                boolean isSuccess = false;
                List<Map<String, String>> maps=new ArrayList<Map<String,String>>();
                try {
                    List<GeoArea> buildings= geoAreaService.findBuildings();
                    for (GeoArea building : buildings) {
                        Map<String,String> map=new HashMap<String, String>();
                        map.put("value", building.getId().toString());
                        map.put("text", building.getName());
                        maps.add(map);
                    }
                    msg = "查找大楼成功。";
                    isSuccess=true;
                } catch (Exception e) {
                    msg = "查找大楼失败。";
                    log.error("查找大楼失败:" + e.getMessage(), e);
                } 
               
            return buildAjaxResult(isSuccess, msg,maps);
        }
        @RequestMapping("loadFloors")
        @ResponseBody
        public Map<String, Object> loadFloors(@RequestParam("buildingId")Integer buildingId,ModelMap model){
            String msg = "";
            boolean isSuccess = false;
            List<Map<String, String>> maps=new ArrayList<Map<String,String>>();
            try {
                List<GeoArea> floors= geoAreaService.findFloorById(buildingId);
                for (GeoArea floor : floors) {
                    Map<String,String> map=new HashMap<String, String>();
                    map.put("value", floor.getId().toString());
                    map.put("text", floor.getName());
                    map.put("other", floor.getCode());
                    maps.add(map);
                }
                msg = "查找楼层成功。";
                isSuccess=true;
            } catch (Exception e) {
                msg = "查找楼层失败。";
                log.error("查找楼层失败:" + e.getMessage(), e);
            } 
            
            return buildAjaxResult(isSuccess, msg,maps);
        }
    
    protected Map<String, Object> buildAjaxResult(boolean isSuccess, String msg, Object data) {
            Map<String, Object> resultMap = new HashMap<String, Object>();
            resultMap.put("success", isSuccess);
            resultMap.put("msg", msg);
            resultMap.put("data", data);
            return resultMap;
        }

    搞定!

  • 相关阅读:
    .Net连接字符串设置连接池大小显著提高数据库速度
    转载:MongoDB之旅(超赞,适合初学者)
    MongoDB安装成为Windows服务及日常使用遇到问题总结
    开启Windows文件共享必须开启的两个服务
    Cocos2d-JS中瓦片地图API
    EF-CodeFirst 继承关系TPH、TPT、TPC
    MVC5-4 ViewResult
    MVC5-3 Result分析
    MVC5-2 MVC的管道流与路由
    MVC5-1 ASP.NET的管道流
  • 原文地址:https://www.cnblogs.com/winkey4986/p/2949487.html
Copyright © 2020-2023  润新知