select联动在实际项目中是再熟悉不过了,经常要使用到,每次都要去整理,梳理,会花费一些不必要的时间。然而select标签的使用,在不同的开发中也不一样,比如在vue中跟jsp中,今天主要是梳理在jsp中的应用,vue的使用也是类似。

当然,方法有很多种,下面这种方法是我个人比较经常使用的,需要的朋友可以参考借鉴。

一:假设现在jsp中有两个类别,一级类别和二级类别,二级类别跟随一级类别联动。一级类别和二级类别数据源来自于后台。我们的实现思路是在第一个select标签设置onChange事件,然后使用jq动态修改第二个select的option,那么在onChange事件中,我们要获取二级类别的数据,就有两个实现方式,一种是异步加载,一种是在jsp初始化的时候从后台传二级类别的所有数据,然后在进行匹配。鉴与数据量不多,今天要总结的则是使用第二种方式。下面是具体的代码。

controller,在调整jsp前的代码

public String form(YzCourse yzCourse, Model model) {
		model.addAttribute("yzCourse", yzCourse);
		//获取一级类别,二级类别
		model.addAttribute("level1List", courseCategoryService.findLevel1List());
		model.addAttribute("level2List", courseCategoryService.findLevel2List());
        //包含了id,parentId,name
		List<CourseCategory> categories=courseCategoryService.findLevel2List();

		return "modules/course/courseForm";
	}

courseForm.jsp

<tr>
				   <td >
                     //一级类别
					 <form:select path="level1" 
                         readonly="true" onchange="getLevel2(this.value)" >
						   <form:option value="">请选择</form:option>
						   <form:options  items="${level1List}" 
                                itemLabel="name" itemValue="id"></form:options>
					   </form:select>  
				   </td>
				   <td>
                    //二级类别
					 <form:select path="level2" id="level2">
						   <form:option value="">请选择</form:option>
						   <form:options items="${level2List}" 
                                itemLabel="name" itemValue="id"></form:options>
					   </form:select>
				   </td>
			   </tr>

相信有点jsp基础的朋友都看的懂,这边不做过多解释哈,有问题的朋友可以留言。

js:

<script>
	function getLevel2(level1){
      //后台获取的二级类别数据
	  var arr=${level2List};
      var options="";

      //回填的二级类别值
      var level2=${yzCourse.level2}+"";
      $("#level2").empty();
      options+="<option value=''>请选择</option>";
      //遍历二级类别数据,把parentId为level1的数据动态赋值到option中
      $.each(arr, function(i, item){
        if(parseInt(item.parentId) == parseInt(level1)){
           //此处是修改回填绑定的,增加了selected='true'属性
          if(parseInt(item.id) == level2){
            options+="<option selected='true'  value="+item.id+">"+item.name+"</option>";
		  }else{
            options+="<option value="+item.id+">"+item.name+"</option>";
          }
        }
      });
      $("#level2").append(options);
	}
</script>

最后,

//此处是修改的回填操作,当id不为空,去绑定二级类别数据
$(document).ready(function() {
			var id=${yzCourse.id}+"";
			if(id !=""){
              getLevel2(${yzCourse.level1});
			}
		});