`
阅读更多

注释:

该方法是一个通用方法,不局限多少级,无限级都可以,该示例演示新建页,和编辑页面不同的调用。

新建页面时需要初始化第一个select。编辑页面无需初始化。返回json时,后台对象做过一次简单处理,把pojo的list转换为Object list,object中只有两个属性id、name。然后再toJson,返回view。

按照调用的先后顺序贴代码,如下:

新建页面代码:

<select name="categoryid1" id="categoryid1" class="required">
              <option value=""></option>
</select>
<select name="categoryid2" id="categoryid2" class="required">
</select>      
<select name="categoryid3" id="categoryid3" class="required">
</select>
<select name="categoryid4" id="categoryid4" class="required">
</select>
<script type="text/javascript">
    /* 初始化第一个下拉框数据 */
    setSelect('0','categoryid1','getCaseCategory.htm');

    $(function() {
        $("#categoryid1").change(function(){
            $("#dynamic_html").hide();
            onSelectChange($(this),'categoryid2','getCaseCategory.htm');
        });
        $("#categoryid2").change(function(){
            onSelectChange($(this),'categoryid3','getCaseCategory.htm');
        });
        $("#categoryid3").change(function(){
            onSelectChange($(this),'categoryid4','getCaseCategory.htm');
        });
    });
</script>

JS代码:

/*
 * 基JQuery自动创建级联下拉菜单,动态ajax请求后台数据,
           参数:下拉框变更的时候获取当前 对象、标识、url
           如果是新建页面,需要直接调用该方法,obj=0或者是指定的根节点id,后台代码判断如果=0或者根节点id,直接查询,其它则会子级的,要根据ID获取下级数据,页面需要单独调用onSelectChange();如果是编辑页面则不需要直接调用      
*/
function onSelectChange(obj,toSelId,urlStr){
    if(obj.val() != null && obj.val() !="" && obj.val().length>0){
        setSelect(obj.val(),toSelId,urlStr);
    }else{
        $("#" + toSelId).empty();//如果选择项为空时,当前控件清空
        $("#" + toSelId).nextAll('select').empty()//如果选择项为空时,当前控件的子级全部清空
        obj.nextAll('select').hide();
    }
}

//请求后台获取数据
function setSelect(parentId,toSelId,urlStr,selectedId){
      jQuery.ajax({
          type: "POST",
          url: urlStr,
          async: false,
          cache: false,
          data:"parentId="+parentId,
          success: function(data){
            createSelectObj(data,toSelId,selectedId);
          },
          error:function(data){
              window.location.href = "/ecs/index.html";
          }
    });
}

//根据已获取数据动态构建select控件
function createSelectObj(data,toSelId,selectedId){
    
    var arr = jsonParse(data);
    var obj = document.getElementById(toSelId);
    
    if(arr != null && arr !="" && arr.length>0){
        initSelectObj(obj,toSelId);
        for(var i = 0; i < arr.length ; i++){
            var op = document.createElement("option");
            op.setAttribute("value",arr[i].id);
            if(selectedId == arr[i].id){
                op.setAttribute("selected","selected");
            }
            op.appendChild(document.createTextNode(arr[i].name));
            obj.appendChild(op);
        }
        $("#" + toSelId).nextAll('select').hide();
        $("#" + toSelId).show();
        $("#" + toSelId).nextAll('select').empty();//清空所有子级select控件,否则当重新选择的时候,上次选择的子级值只是被隐藏,但值依旧存在,依然会被保存。
    }else{//如果当前节点下没有子节点了,那么就把下一个select置空
        $("#" + toSelId).nextAll('select').hide();
        $("#" + toSelId).hide();
        $("#" + toSelId).nextAll('select').empty();
        initSelectObj(obj,toSelId);
    }
}

//初始化指定id的select控件
function initSelectObj(obj,toSelId){
    obj.innerHTML="";
    var nullOp = document.createElement("option");
    nullOp.setAttribute("value","");
    nullOp.appendChild(document.createTextNode(""));
    obj.appendChild(nullOp);
}

新建页面请求的后台代码:

@RequestMapping(value = {"/getCaseCategory.htm"})
    public String getCaseCategory(ModelMap model,HttpServletRequest req, Integer parentId){
        /*String parentId=req.getParameter("parentId");//获取父级ID    */        
        log.info("获取服务类型,父id="+parentId);
        /*List<SelectObj> sList = selectObjService.findCategorySelectObjListByParentId(Integer.parseInt(parentId));*/
        List<SelectObj> sList = selectObjService.findCategorySelectObjListByParentId(parentId);
        JSONArray jsonArray = JSONArray.fromObject(sList);
        log.info("通过父id:"+parentId+"获取下级服务类型:"+jsonArray);
        model.put("data", jsonArray);
        return "json";
    }

 

编辑页代码:

<select name="categoryid1" id="categoryid1" disabled="disabled">
                        <option value=""></option>
                    #foreach($c1 in $c1List)
                        #if($!{c1.id} == $!case.categoryid1)
                        <option value="$!{c1.id}" selected="selected">$!{c1.name}</option>
                        #else
                        <option value="$!{c1.id}">$!{c1.name}</option>
                        #end
                    #end
                </select>
                #if(!$case.categoryid2.isNull() && ${case.categoryid2} && $!{case.categoryid2}!="0")
                    <select name="categoryid2" id="categoryid2" disabled="disabled">
                        <option value=""></option>   
                        #foreach($c2 in $c2List)
                            #if($!{c2.id} == $!case.categoryid2)
                            <option value="$!{c2.id}" selected="selected">$!{c2.name}</option>
                            #else
                            <option value="$!{c2.id}">$!{c2.name}</option>
                            #end
                        #end
                    </select>
                #end   
               
                #if(!$case.categoryid3.isNull() && ${case.categoryid3} && $!{case.categoryid3}!="0")
                    <select name="categoryid3" id="categoryid3" disabled="disabled">
                            <option value=""></option>
                        #foreach($c3 in $c3List)
                            #if($!{c3.id} == $!case.categoryid3)
                            <option value="$!{c3.id}" selected="selected">$!{c3.name}</option>
                            #else
                            <option value="$!{c3.id}">$!{c3.name}</option>
                            #end
                        #end
                    </select>
                #end   
               
                #if(!$case.categoryid4.isNull() && ${case.categoryid4} && $!{case.categoryid4}!="0")
                    <select name="categoryid4" id="categoryid4" disabled="disabled">
                        <option value=""></option>
                        #foreach($c4 in $c4List)
                            #if($!{c4.id} == $!case.categoryid4)
                            <option value="$!{c4.id}" selected="selected">$!{c4.name}</option>
                            #else
                            <option value="$!{c4.id}">$!{c4.name}</option>
                            #end
                        #end
                    </select>
                #end

编辑页调用的JS,也是上面的JS,只是在编辑页面使用时不需要初始化第一个select。

 

分享到:
评论

相关推荐

    最新版Jquery网站导航级联菜单

    网上找了很久这种菜单,浪费了很多时间,实在没办法,只好老老实实去官网上按说明弄了一个,并更新了,jquery1.5.2, 希望给有需要的朋友可以节约一点时间,欢迎交流,qq:170262

    JQuery写的日期级联下拉菜单

    **jQuery编写的日期级联下拉菜单** 在Web开发中,日期选择是一个常见的需求,而级联下拉菜单则是实现这一功能的一种优雅方式。这里我们讨论的“JQuery写的日期级联下拉菜单”是一个利用jQuery库实现的交互式用户...

    jQuery 级联下拉列表(修正版)

    这意味着我们将讨论一个已经过优化或修复了某些问题的jQuery插件,用于创建级联下拉菜单。级联下拉列表的基本工作原理是,当用户在一个下拉框中选择一个选项时,它会触发事件,更新关联的下一个下拉框的选项,使其只...

    java web下开发二级级联下拉菜单(数据库实现的)

    在Java Web开发中,二级级联下拉菜单是一种常见的用户界面元素,用于提供层次结构的选择。这个场景中,我们利用数据库存储数据,并通过后端处理逻辑动态生成这些下拉菜单。下面将详细介绍如何使用MySQL数据库来实现...

    jquerycasecader一个jquery级联下拉组件

    `jQuery Casecader` 是一个用于构建级联下拉菜单的插件,适用于那些需要多级选择或者联动效果的Web应用。在JavaScript开发中,特别是在前端交互设计中,这种组件非常常见,能够帮助用户通过下拉选项来筛选和导航数据...

    级联下拉菜单

    在级联下拉菜单中,jQuery将帮助我们监听用户在第一个下拉菜单中的选择,并基于此触发Ajax请求获取关联数据。 接着,我们来看看ASP.NET的一般处理程序(.ashx)。这是一种HTTP处理模块,它可以像ASPX页面一样处理...

    jQuery+ajax实现三级级联

    在这个“jQuery+ajax实现三级级联”的实例中,我们主要探讨如何利用这两种技术来创建一个能够逐级联动的下拉菜单系统,这在数据筛选和表单填写中十分常见,如地区选择、部门分类等场景。 首先,jQuery是一个轻量级...

    select2 省市区 级联 下拉菜单

    6. **禁用未激活的下拉**:为了防止用户在级联完成前做出无效选择,可以将未激活的下拉菜单设为禁用状态。当某个选择发生时,才启用相应的下拉菜单。 通过以上步骤,你可以成功实现一个基于select2的全国省市区三级...

    jsp+json+mySql 实现二级级联下拉菜单

    在本文中,我们将深入探讨如何使用JSP、JSON和MySQL来实现一个二级级联下拉菜单。这个功能常用于网站的表单设计中,让用户能够从相关联的分类中选择选项,例如省份与城市的选择。 首先,让我们了解这三个技术的核心...

    实用jQuery省市区三级城市级联下拉菜单选择插件jQuery cxSelect

    实用jQuery省市区三级城市级联下拉菜单选择插件jQuery cxSelect,功能强大非常不错的jQuery插件, 支持省市区三级联动以及全球国家城市的联动,数据采用JSON格式导入,非常方便的,强大的参数 自定义功能,还可以...

    jQuery实现的多级级联下拉列表

    在网页设计中,级联下拉列表是一种常见的交互元素,它允许用户在多个下拉菜单之间建立关联,根据前一个菜单的选择动态更新后一个菜单的内容。这种功能在数据过滤、地区选择、分类导航等场景中非常实用。本教程将深入...

    级联下拉菜单:级联表单下拉菜单

    级联下拉菜单jQuery插件,它允许您根据先前的选择来填充一组表单下拉菜单。演示版基本用法要使用该插件而不覆盖任何默认设置,您需要使用多个下拉(选择)菜单创建表单的结构。 在以下示例中,我正在使用&lt;form&gt...

    select级联下拉列表

    在网页设计中,"select级联下拉列表"是一种常见的交互元素,用于创建省市区选择、类别层级展示等场景。...在实际开发中,我们可以结合jQuery、Ajax以及各种UI库或插件,根据项目需求定制出满足各种场景的级联下拉列表。

    级联下拉demo

    级联下拉通常由两个或更多的下拉菜单组成,其中第二个(或更多)的选项取决于第一个的选择。这种交互方式可以节省屏幕空间,同时提供多层信息的导航。在前端开发中,我们可以使用JavaScript库(如jQuery)、框架(如...

    级联下拉列表

    级联下拉列表是一种常见的前端交互设计,常用于如地区选择、分类筛选等场景,它使得用户能够通过一个下拉菜单的选择触发另一个下拉菜单的内容更新。在这个案例中,我们只用五句代码就能实现这样的功能,这充分体现了...

    jquery下拉菜单级联选择地区

    在IT领域,级联下拉菜单(Cascading Dropdown)是一种常见的交互设计,它用于创建一个联动的效果,用户在一个下拉菜单中选择一项后,另一个相关的下拉菜单会更新其选项,以显示与前一次选择相关的内容。在这个场景中...

    级联下拉(aaa)

    在用户界面设计中,级联下拉菜单可以极大地提高用户体验,因为它能够减少用户输入和浏览大量选项的时间,同时保持界面的整洁。"aaa"可能表示这个特定的级联下拉实现具有某些特色或者优化。 在级联下拉中,用户首先...

    Bootstrap每天必学之级联下拉菜单

    本文将深入探讨如何使用Bootstrap构建级联下拉菜单,并结合jQuery、Ajax以及Spring MVC实现动态数据加载。 首先,Bootstrap级联下拉菜单的基础构建依赖于Bootstrap的下拉菜单组件(Dropdown)。在HTML结构中,我们...

    Jquery网站导航级联菜单(Jquery1.7)

    在"Jquery网站导航级联菜单(Jquery1.7)"这个主题中,我们将深入探讨如何使用jQuery1.7版本来创建交互式的横排和竖排下拉菜单,为网站的导航提供更为流畅和用户友好的体验。** ### 一、jQuery简介 jQuery1.7是...

    Jquery网站导航级联菜单(Jquery1.9.1)

    在本教程中,我们将深入探讨如何使用jQuery 1.9.1实现横排与竖排的下拉菜单。 **1. jQuery简介** jQuery是一个高效、简洁的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互等任务。jQuery 1.9.1是...

Global site tag (gtag.js) - Google Analytics