通过ajax实现部门与员工的二级级联,三级级联相同的原理

3 篇文章 0 订阅
1 篇文章 0 订阅

首先看一下简单的样式:
这里写图片描述

在页面加载完毕后,所有部门的名字也全部显示在下拉框中,下拉框绑定onchange事件,通过ajax获得部门对应的所有员工名。

在加载部门的时候,我用的是ssm框架中的ModelAndView对象绑定了一个参数,参数中有所有部门的信息,在前台通过jstl标签处理参数。

html代码:

<form class="form-inline">
              <div class="form-group col-xs-offset-1">
                <label for="exampleInputName2">部门:</label>
                <select id="department" class="form-control" style="margin-right: 50px;" onchange="getemployee()">

                    <option>==请选择==</option>
                    <c:forEach var="department" items="${DepartmentList}">
                        <option value="${department.departmentId}">${department.departmentName}</option>
                    </c:forEach>
                </select>

                <label for="exampleInputEmail2">员工名:</label>
                <select id="employee" class="form-control" style="margin-right: 100px;"  onchange="alertdate()">

                    <option>==请选择==</option>


                </select>
                <button class="btn btn-primary">保存</button>
              </div>

后台controller代码:

/**
     * 按个人排班页面
     * @return
     */
    @RequestMapping("groupbyself")
    public ModelAndView GroupBySelf(){

        List<Department> departmentlist=scheduleservice.getAllDepaertment();

        ModelAndView mv=new ModelAndView();

        mv.setViewName("groupbyself");
        mv.addObject("DepartmentList", departmentlist);

        return mv;
    }

具体样式如下,我数据库中的部门只有一个。

这里写图片描述

js部分onchange事件代码:

function getemployee(){

            var departmentId=$("#department").val();

            var departmentName=$("#department option:checked").text();

            $("#employee").html("<option>==请选择==</option>"); //避免选择同一个部门多次生成一个部门的员工,所以每次查询员工前初始化

            $.ajax({
                url:"getEmployeeByDepartmentId",
                type:"post",
                async : false,
                data:{"departmentId":departmentId},
                success:function(msg){
                    if(msg!=null){
                        for(var i=0;i<msg.length;i++){
                            //alert(msg[i].employeeId);
                            $("#employee").append("<option value='"+msg[i].employeeId+"'>"+msg[i].employeeName+"</option>"); 
                        }
                    }
                }
            });

        }

第二个下拉框内容的后台代码:

/**
     * 根据部门id,得到该部门所有的成员
     * @param departmentId
     * @return
     */
    @ResponseBody
    @RequestMapping(value="getEmployeeByDepartmentId",produces="application/json;charset=UTF-8")
    public String GetEmployeeByDepartmentId(int departmentId){

        JSONArray employees=scheduleservice.getEmployeeByDepartId(departmentId);

        return employees.toString();
    }

每触发一次事件,就会获取前一下拉框当前选中的部门的id。将部门的id传入后台得到该部门所有的员工,传回json格式的字符串,在回调函数中通过for循环遍历,生成新的option。

需要注意的地方就是每次触发事件调用这个函数的时候,要将第二级下拉框的内容初始化为‘请选择’。

这里写图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现基于 AJAX三级级联下拉菜单,需要使用 servlet 响应 AJAX 请求,动态生成下拉菜单的 HTML 代码,并通过 AJAX 将生成的 HTML 代码返回给前端。 以下是实现基于 AJAX三级级联下拉菜单的步骤: 1. 在 JSP 页面中添加三个下拉菜单,分别对应三级级联下拉菜单的三个级别。 2. 使用 JavaScript 监听第一个下拉菜单的 onchange 事件,当第一个下拉菜单的选项改变时,发送 AJAX 请求到 servlet。 3. 在 servlet 中获取第一个下拉菜单的选项值,根据选项值生成第二个下拉菜单的选项,以及第三个下拉菜单的选项所需要的数据。 4. 使用 StringBuilder 动态生成 HTML 代码,并将生成的 HTML 代码返回给前端。 5. 在 JavaScript 中监听 AJAX 的 success 事件,将返回的 HTML 代码插入到第二个和第三个下拉菜单中。 以下是代码示例: Java 代码: ```java @WebServlet("/cascade") public class CascadeServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String parentId = request.getParameter("parentId"); List<Category> categories = getCategoryList(parentId); StringBuilder sb = new StringBuilder(); sb.append("<option value=\"\">请选择</option>"); for (Category category : categories) { sb.append("<option value=\"").append(category.getId()).append("\">").append(category.getName()).append("</option>"); } response.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); response.getWriter().write(sb.toString()); } private List<Category> getCategoryList(String parentId) { // 根据 parentId 获取子分类列表 // ... } } ``` JavaScript 代码: ```javascript $(function() { $("#level1").change(function() { var parentId = $(this).val(); if (parentId == "") { $("#level2").html("<option value=''>请选择</option>"); $("#level3").html("<option value=''>请选择</option>"); return; } $.ajax({ url: "cascade", data: {parentId: parentId}, success: function(response) { $("#level2").html(response); $("#level3").html("<option value=''>请选择</option>"); } }); }); $("#level2").change(function() { var parentId = $(this).val(); if (parentId == "") { $("#level3").html("<option value=''>请选择</option>"); return; } $.ajax({ url: "cascade", data: {parentId: parentId}, success: function(response) { $("#level3").html(response); } }); }); }); ``` JSP 页面代码: ```html <select id="level1"> <option value="">请选择</option> <option value="1">一级分类1</option> <option value="2">一级分类2</option> <option value="3">一级分类3</option> </select> <select id="level2"> <option value="">请选择</option> </select> <select id="level3"> <option value="">请选择</option> </select> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值