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;
    }
 效果如图:

 
原文地址:https://www.cnblogs.com/winkey4986/p/2948976.html