场景介绍:

由于项目要求,需要做一个进件(新增)功能,而该功能里要用到车品牌、车系、车型的联动查询,也就是经典的三级联动。

大体思路如下:

进入页面,会把所有的车品牌(第一级)在后台查询出来,放到缓存,页面在循环遍历,当选中车品牌(第一级)的某一项时,会根据此项异步的调用后台的方法,然后渲染到前台页面的车系(第二级),当选中车系(第二级)的某一项时,也会根据此项异步的调用后台的方法,然后渲染到前台页面的车型(第三级)。

当重新选择车品牌(第一级)时,会把车系(第二级)和车型(第三级)置为初始值'请选择车系'、'请选择车型',若车品牌(第一级)不做修改,而只是重新选择车系(第二级)时,则车型(第三级)要置为初始值'请选择车型'。

记录一下其中的难点(我认为的难点):

当重新选择某一级数据时,要把他的下级以及子级都要置为初始值!经过请教同事和搜索引擎,找到了一个叫select()的插件。

下面就贴出项目中关键代码:

JSP表单代码:

  1. <div class="control-group" style="margin-top:12px;">
  2. <label class="controls-label">品牌名称:</label>
  3. <form:select id="operTypeSelect" path="bannerId" class="input-medium" onchange="getBranchByBrandName()">
  4. <form:option selected="selected" value="">请选择</form:option>
  5. <c:forEach items="${tCdCarBrandList}" var="item" varStatus="status">
  6. <form:option value="${item.id }">${item.brandName }</form:option>
  7. </c:forEach>
  8. </form:select>
  9. <label class="controls-label">车系名称:</label>
  10. <select id="operSelect" name="branchId" class="input-medium" onClick="getModelByBranchName()">
  11. <option selected="selected" value="">请选择</option>
  12. <c:forEach items="${tCdCarBranchList}" var="item" varStatus="status">
  13. </c:forEach>
  14. </select>
  15. <label class="controls-label">车型名称:</label>
  16. <select id="modelsId" name="modelId" class="input-medium" style="width:400px;">
  17. <option selected="selected" value="">请选择</option>
  18. <c:forEach items="${tCdCarModelList}" var="item" varStatus="status">
  19. </c:forEach>
  20. </select>
  21. </div>

JS部分代码:

  1. function getBranchByBrandName() {
  2. var operTypeSelect = document.getElementById("operTypeSelect");
  3. var operTypeValue = operTypeSelect.value;
  4. var brandId = operTypeValue;
  5. $("#brandId").val(brandId);
  6. $("#modelsId").empty();
  7. $.ajax({
  8. mode:"abort",
  9. contentType:"application/x-www-form-urlencoded;charset=UTF-8",
  10. data:{"brandId":brandId},
  11. type:"POST",
  12. url:"<span style="font-family: Arial, Helvetica, sans-serif;">你的后台方法访问路径</span>",
  13. cache:false,
  14. async:false,
  15. processData:true,
  16. dataType:"json",
  17. success:function(tCdCarBrandList) {
  18. if (tCdCarBrandList != null && tCdCarBrandList.length > 0) {
  19. var str = "<option value=''> " + "请选择" + "</option>;";
  20. $.each(tCdCarBrandList, function(i, item) {
  21. if (item != "") {
  22. str = str + "<option value="+item.id+"> " + item.branchName + "</option>;";
  23. $("#operSelect").html(str);
  24. } else {
  25. $("#operSelect").html("<option id = oper value=''>请选择</option>");
  26. }
  27. });
  28. } else {
  29. $("#operSelect").html("<option id = oper>请选择</option>");
  30. }
  31. <span style="rgb(255, 0, 0);">$("#operSelect").select();</span>
  32. $("#modelsId").html("<option value=''>请选择</option>");
  33. <span style="background-color: rgb(255, 0, 0);">$("#modelsId").select();</span>
  34. }
  35. });
  36. }
  37. function getModelByBranchName() {
  38. var brandId = $("#operTypeSelect").val();
  39. var branchId = $("#operSelect").val();
  40. $("#bannerId").val(branchId);
  41. $.ajax({
  42. mode:"abort",
  43. contentType:"application/x-www-form-urlencoded;charset=UTF-8",
  44. data:{"brandId":brandId,"branchId":branchId},
  45. type:"POST",
  46. url:"你的后台方法访问路径",
  47. cache:false,
  48. async:true,
  49. processData:true,
  50. dataType:"json",
  51. success:function(tCdCarModelList) {
  52. if (tCdCarModelList != null && tCdCarModelList.length > 0) {
  53. var str = "<option value=''> " + "请选择" + "</option>;";
  54. $.each(tCdCarModelList, function(i, item) {
  55. if (item != "") {
  56. str = str + "<option value="+item.id+"> " + item.modelName + "</option>;";
  57. $("#modelsId").html(str);
  58. } else {
  59. $("#modelsId").html("<option value=''>请选择</option>");
  60. }
  61. });
  62. } else {
  63. $("#operSelect").html("<option value=''>请选择</option>");
  64. }
  65. <span style="background-color: rgb(255, 0, 0);">$("#modelsId").select();</span>
  66. }
  67. });
  68. }

后台JAVA部分查询代码:

  1. @ResponseBody
  2. @RequestMapping(value="findBranchByBrandName")
  3. public List<TCdCarBranch> findBranchByBrandName(TCdCarBranch tCdCarBranch,
  4. HttpServletRequest request, HttpServletResponse response, Model model) {
  5. // SQL中只用到了ajax中data的brandId,brandId与tCdCarBranch里的brandId字段对应
  6. List<TCdCarBranch> tCdCarBranchList = tCdCarBranchService.findList(tCdCarBranch);
  7. model.addAttribute("tCdCarBranchList", tCdCarBranchList);
  8. return tCdCarBranchList;
  9. }
  10. @ResponseBody
  11. @RequestMapping(value="findModel")
  12. public List<TCdCarModel> findModel(TCdCarModel tCdCarModel, HttpServletRequest request,
  13. HttpServletResponse response, Model model) {
  14. // SQL中只用到了ajax中data的brandId和branchId
  15. // brandId和branchId与tCdCarModel里的brandId和branchId字段分别对应
  16. List<TCdCarModel> tCdCarModelList = tCdCarModelService.findList(tCdCarModel);
  17. model.addAttribute("tCdCarModelList", tCdCarModelList);
  18. return tCdCarModelList;
  19. }

其中JS部分代码中背景为红色高亮代码即是可以将其下级以及子级置为初始化的关键代码,当初就是这行代码困扰了很少时间,

JS高亮代码加入之前的演示:

JS高亮代码加入之后的演示:

省市区县三级联动JAVA+MySQL+JQuery的更多相关文章

  1. easyui commobox省市区县三级联动

    1.前端代码 <div class="col-6 f-group"> <label class="col-4 left_red"> 省名 ...

  2. 基于Jquery实现省份、城市、区县三级联动

    前端感觉写的比较少,也是为了练手,下午没事用来写了这个三级联动,也是第一次写这东西. 据我了解,城市信息可以选择存在数据库或者直接写在前端,为了省事,我直接写在前端,下面是我的代码: <!DOC ...

  3. echarts地图边界数据的实时获取与应用,省市区县多级联动【附最新geoJson文件下载】

    首先,来看下效果图 在线体验地址:https://hxkj.vip/demo/echartsMap/,并提供实时geoJson数据文件下载 echarts官方社区链接地址(可在线编辑):https:/ ...

  4. ajax省市线三级联动

    <script type='text/javascript' src='http://ajax.useso.com/ajax/libs/jquery/1.7.2/jquery.min.js?ve ...

  5. 省份、城市、区县三级联动Html代码

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  6. echarts 中国地图实现 省、市、区县三级联动,省级下钻、市级下钻

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 效果如下图: 每天学习一点点 编程PDF电子书.视频教程免费下载:http://www ...

  7. Pyqt QComboBox 省市区县联动效果

    在Qt中, QComboBox方法窗口组件允许用户从列表清单中选择,在web中就是select标签,下拉选项. 省市区县的联动就是currentIndexChanged 获取当前的Index,通过这个 ...

  8. 循序渐进VUE+Element 前端应用开发(21)--- 省市区县联动处理的组件使用

    在很多应用中,往往都涉及到记录用户所在省份.城市.区县或者街道等信息,一般我们可以通过联动的Select或者类似的界面组件进行展示,或者使用Element中的el-cascader界面组件进行展示,而 ...

  9. Webform——中国省市三级联动以及IsPostBack

    首先要明白Webform的运行顺序,当开始启动时候,首先执行的是Page_Load事件, 当点击任意按钮后,每次点击都要先执行一遍Page_Load(在这里Page_Load里面的事件是给数据控件加载 ...

随机推荐

  1. Aras Innovator 11 sp2安装

    本文档记录Aras Innovator 11 sp2的安装过程 官方安装文档:http://www.aras.com/support/documentation/ Aras Innovator 11. ...

  2. NLPIR

    # coding: utf-8 import pynlpir from pynlpir import nlpir nlpir.Init(nlpir.PACKAGE_DIR, nlpir.UTF8_CO ...

  3. PTA L2-002 链表去重 团体程序设计天梯赛-练习集

    L2-002 链表去重(25 分)   给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉.即对每个键值 K,只有第一个绝对值等于 K 的结点被保留.同时,所有被删除的结点须被保存在另 ...

  4. 17-7-27-日常学习react

    啊啊啊啊啊啊啊,今天改了一天的css,因为项目是由两个开源项目整合而成,所以CSS合并的时候,超级超级奇怪,就一直在调.不过也学会了怎么调css.之前觉得css很困难,不过调了一天,感觉还好,就是自己 ...

  5. Linux操作命令(五)

    find . -name ”*.c" -exec ./command.sh {} \; 本次实验将介绍 Linux 命令中 find 和 xargs 命令的用法. find xargs 1. ...

  6. POJ 1797 Heavy Transportation 【最大生成树的最小边/最小瓶颈树】

    Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand bus ...

  7. Web框架以及两种模式MVC,MTV

    一.Web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. import socket def handle_reques ...

  8. go chapter 1

    case 1 // helloworld.go package main import "fmt" func main() { fmt.Println("Hello, 世 ...

  9. 简单了解gzip、bzip2、xz

    压缩工具gzip.bzip2.xz分别对应压缩格式.gz..bz2..xz.不过tar命令已经可以满足大部分使用,所以这些格式只简单了解一下.gzip压缩速度最快,xz压缩率最高,bz2适中.一般这三 ...

  10. 【动态规划】POJ3280- Cheapest Palindrome

    [题目大意] 给出一个字符串,可以删除或添加一些字符,它们各自会消耗价值.问最少消耗多少价值,可以使得字符串变成回文的. [思路] 事实上删除或添加字符的价值只需要保持较小的那一个.假设当前要将(j, ...