概述
下拉框联动就是,后一个下拉框的内容根据前一个下拉框的内容动态加载,例如:前一个下拉框是省份
,后一个下拉框是市
,它们之间存在关联
实现办法
第一个下拉框的内容在页面跳转的时候就直接从Java后端获取并加载
第二个下拉框的内容则监听第一个下拉框的内容是否改变了(通过onchange属性监听,属性值为内容改变请求的JavaScript方法),每改变一次就从Java后端获取一次数据,然后通过jQuery动态生成选项
实现过程
下拉框描述
第一个下拉框是商品类别,第二个是对应的商品名称
HTML代码
商品类别使用Thymeleaf获取并加载,onchange="getGoodsNameTestPage()"
实现监听内容的改变并请求getGoodsNameTestPage()
方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <div class="form-group form-inline" onchange="getGoodsNameTestPage()"> <label for="name">商品类别:</label> <select id="goodsTypeIdTestPage" name="goodsTypeId" required="required" class="form-control"> <option value="">选择商品类别...</option> <div th:each="goodsType:${goodsTypeList}"> <option th:text="${goodsType.name}" th:value="${goodsType.id}"></option> </div> </select> </div> <div class="form-group form-inline"> <label for="name">商品名称:</label> <select id="goodsNameTestPage" name="goodsTypeId" required="required" class="form-control"> <option value="">先选择商品类别...</option> </select> </div>
|
跳转页面的控制层方法
主要是向页面传递goodsTypeList
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
@RequestMapping("/toTestPage") public ModelAndView toTestPage() { ModelAndView mav = new ModelAndView(); List<GoodsType> goodsTypeList = goodsTypeService.list(null); mav.addObject("goodsTypeList", goodsTypeList); mav.addObject("title", "测试界面--LeDao校园二手交易平台"); mav.addObject("mainPage", "page/test"); mav.addObject("mainPageKey", "#b"); mav.setViewName("index"); return mav; }
|
JavaScript请求的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| function getGoodsNameTestPage() { let goodsTypeId = $("#goodsTypeIdTestPage").val(); if (goodsTypeId === "") { $("#goodsNameTestPage").empty().append('<option>选择商品名称...</option>'); return false; } $.ajax({ type: "get", url: "/getGoodsListByGoodsTypeId?goodsTypeId=" + goodsTypeId, success: function (result) { let goods = $("#goodsNameTestPage").empty(); goods.append('<option>选择商品名称...</option>'); for (let i = 0; i < result.length; i++) { goods.append("<option value='" + result[i].id + "'>" + result[i].name + "</option>"); } } }); }
|
Ajax请求的后端方法
主要是获取对应商品类别的商品集合并返回
1 2 3 4 5 6 7 8 9 10 11 12 13
|
@ResponseBody @RequestMapping("/getGoodsListByGoodsTypeId") public List<Goods> getGoodsListByGoodsTypeId(Integer goodsTypeId) { QueryWrapper<Goods> goodsQueryWrapper = new QueryWrapper<>(); goodsQueryWrapper.eq("goodsTypeId", goodsTypeId); return goodsService.list(goodsQueryWrapper); }
|
结果动态图
PS.
如果不使用Thymeleaf,那么第一个下拉框的内容在页面一加载时就通过Ajax请求Java后端来获取