zoukankan      html  css  js  c++  java
  • jquery实现ajax联动框

    前台页面

    <script type="text/javascript" src="${rc.contextPath}/js/jquery.select.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
          $("#rwflSelect").linkSelect({
          nodata:"none",
          required:true,
          firstUrl:'${rc.contextPath}/repair/loadCategory',
          secondUrl:'${rc.contextPath}/repair/loadSubCategory',
          firstValue:'$!{repair.categoryid}',//任务大类
          secondValue:'$!{repair.subcategoryid}'//人物小类
          }); 
          
      });
      </script>
    
    <tr id="rwflSelect">
            <td width="100" class="t_r prten field_c">任务分类:</td>
            <td width="131"><select class="first" name='categoryid'></select> </td>
            <td width="10"></td>
            <td width="131"><select class="second" name="subcategoryid" disabled="disabled"></select></td>
          </tr>

    jquery.select.js
    /*
    Ajax 三级联动
    日期:2013-2-26
    
    settings 参数说明
    -----
    firstUrl:一级下拉数据获取URL,josn返回
    firstValue:默认一级下拉value
    secondUrl:二级下拉数据获取URL,josn返回
    secondValue:默认二级下拉value
    thirdUrl:三级下拉数据获取URL,josn返回
    thirdValue:默认三级下拉value
    nodata:无数据状态
    required:必选项
    ------------------------------ */
    (function($){
        $.fn.linkSelect=function(settings){
            if($(this).size()<1){return;};
            // 默认值
            settings=$.extend({
                firstUrl:"js/city.min.js",
                firstValue:null,
                secondValue:null,
                thirdValue:null,
                nodata:null,
                required:true
            },settings);
    
            var box_obj=this;
            var first_obj=box_obj.find(".first");
            var second_obj=box_obj.find(".second");
            var third_obj=box_obj.find(".third");
            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 secondStart=function(){
                second_obj.empty().attr("disabled",true);
                third_obj.empty().attr("disabled",true);
                if(first_obj.val()==''){
                    return;
                }
                $.getJSON(settings.secondUrl, { firstValue: first_obj.val(), time: new Date().getTime() }, function(jsonResult){
                    if(!jsonResult.success){
                        if(settings.nodata=="none"){
                            second_obj.css("display","none");
                            third_obj.css("display","none");
                        }else if(settings.nodata=="hidden"){
                            second_obj.css("visibility","hidden");
                            third_obj.css("visibility","hidden");
                        };
                        return;
                    }
                    // 遍历赋值二级下拉列表
                    second_obj.html(prepareSelectHtml(jsonResult.data)).attr("disabled",false).css({"display":"","visibility":""});
                    thirdStart();                
                });
                
    
            };
    
            // 赋值三级下拉框函数
            var thirdStart=function(){
                third_obj.empty().attr("disabled",true);
    
                $.getJSON(settings.thirdUrl, { firstValue: first_obj.val(),secondValue:second_obj.val(), time: new Date().getTime() }, function(jsonResult){
                    if(!jsonResult.success){
                        if(settings.nodata=="none"){
                            third_obj.css("display","none");
                        }else if(settings.nodata=="hidden"){
                            third_obj.css("visibility","hidden");
                        };
                        return;
                    }
                    // 遍历赋值三级下拉列表
                    third_obj.html(prepareSelectHtml(jsonResult.data)).attr("disabled",false).css({"display":"","visibility":""});
                    thirdStart();                
                });
            };
    
            var init=function(){
                // 遍历赋值一级下拉列表
                $.getJSON(settings.firstUrl, {time: new Date().getTime() }, function(jsonResult){
                    if(!jsonResult.success){
                        return;
                    }
                    // 遍历赋值一级下拉列表
                    first_obj.html(prepareSelectHtml(jsonResult.data));    
                    secondStart();
                    // 若有传入一级与二级的值,则选中。(setTimeout为兼容IE6而设置)
                    setTimeout(function(){
                        if(settings.firstValue && settings.firstValue.length>0){
                            first_obj.val(settings.firstValue);
                            secondStart();
                            setTimeout(function(){
                                if(settings.secondValue && settings.secondValue.length>0){
                                    second_obj.val(settings.secondValue);
                                    thirdStart();
                                    setTimeout(function(){
                                        if(settings.thirdValue && settings.thirdValue.length>0){
                                            third_obj.val(settings.thirdValue);
                                        };
                                    },1);
                                };
                            },1);
                        };
                    },1);
                });
    
                // 选择一级时发生事件
                first_obj.bind("change",function(){
                    secondStart();
                });
    
                // 选择二级时发生事件
                second_obj.bind("change",function(){
                    thirdStart();
                });
            };
    
            // 初始化第一个下拉框
            init();
        };
    })(jQuery);
    ${rc.contextPath}/repair/loadCategory 对应的后台方法及返回json值:
    @RequestMapping("loadCategory")
        @ResponseBody
        public Map<String, Object> loadCategory(ModelMap model){
               String msg = "";
                boolean isSuccess = false;
                List<Map<String, String>> maps=new ArrayList<Map<String,String>>();
                try {
                    List<Category> categories= categoryService.findAllCategory();
                    for (Category category : categories) {
                        Map<String,String> map=new HashMap<String, String>();
                        map.put("value", category.getId().toString());
                        map.put("text", category.getCategoryName());
                        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;
        }
     效果如图:

     
  • 相关阅读:
    计算机操作系统第四、五章自测题-存储管理
    oracle进制转换
    表空间、数据文件增长情况
    游标、type使用示例
    Linux如何查找大文件或目录总结-1127
    Linux如何查找大文件或目录总结
    工具: ass109.awk 分析 Oracle 的跟踪文件
    分页存储过程
    CSDN Oracle版精华帖荟萃
    vi 替换字符串
  • 原文地址:https://www.cnblogs.com/winkey4986/p/2948976.html
Copyright © 2011-2022 走看看