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;

    }

 

 效果如图:

 

你可能感兴趣的:(jquery)