大类和细类实现二级联动效果

service层:

/**
	 * getCslbZdMap:(获取场所类别和细类). <br/>
	 * @author syzhao
	 * @param 
	 * @return List<DlgbZd>
	 * @since JDK 1.6
	 */
	public HashMap<String, List<DlgbZd>> getCslbZdMap()
	{
		//获取场所的所有的细类
		List<DlgbZd> list = pci.getZdList("CS_CSLBXL");
		//获取大类的数组
		String[] dlDm = this.getCslbDl();
		//定义map ,key = 大类的DM  ,value 是每个大类对应的细类   (这样做就要要求大类和细类必须有联系)
		HashMap<String,List<DlgbZd>> map = new HashMap<String,List<DlgbZd>>();
			for (int i = 0; i < dlDm.length; i++) {
				List<DlgbZd> zdList =new ArrayList<DlgbZd>();
		         for (DlgbZd dlgbZd : list) {
		        	 //这个if是比较关键的地方,因为大类的代码是1,2,3,4 ....  ,而细类则是1001,1002 、 2001,2002 、3001,3002....,
		        	 //因此我根据大类的代码对应细类的代码的第一位来判断的,,如果不一样,对应改变就可以了,,,,因此dlgbZd.getDm().indexOf(dlDm[i])==0就这样的目的
					if (dlgbZd.getDm().indexOf(dlDm[i])==0) {
						//把每个大类写的细类放到list里
						zdList.add(dlgbZd);
					}
				}
		         //把大类的代码放到key里,,,对应的细类放到value,在界面通过大类直接获取细类
		         map.put(dlDm[i], zdList);
		         //列表为null,为下次循环初始化
		         zdList = null;
			}
			//返回map
		return map;
	}
	/**
	 * 
	 * getCslbDl:(获取大类). <br/>
	 * @author syzhao
	 * @return 数组
	 * @since JDK 1.6
	 */
	public String[] getCslbDl()
	{
		/**
		 * 获取所有的大类
		 */
		List<DlgbZd> list = pci.getZdList("CS_CSLB");
		//初始化数组,并且初始化大小
		String[] arrays = new String[list.size()];
		for (int i = 0; i < list.size(); i++) {
			//把大类的代码放到数组里
			arrays[i]=list.get(i).getDm();
		}
		//返回数组
		return arrays;
	}

Controller层:

                @RequestMapping("/zdcs/csxxList.do")
		public String csxxList(Page<GbZdcsJbxx> page,GbZdcsJbxx gbZdcsJbxx, Model model){
			User user = businessSecurityManager.getCurrentUser();
			model.addAttribute("page",csxxXsManager.csxxList(page, gbZdcsJbxx, user));
			model.addAttribute("gbZdcsJbxx",gbZdcsJbxx);
			//获取场所类别和场所细类的json数据
			HashMap<String, List<DlgbZd>> map = csxxLrManager.getCslbZdMap();
			//把map转换成json对象
			JSONObject jsonObject = JSONObject.fromObject(map);
			model.addAttribute("map", jsonObject);
			return "zdcs/csxxList";	
		}

jsp:  这块最好从 $("#cslb").click(function(){})看

           html部分:
                        <tr>
				<th style="width:10%;"><font>*</font>场所类别:</th>
				<td><my:typeSelect name="cslb" id="cslb" lxjp="CS_CSLB"  selected="${gbZdcsJbxx.cslb }"  cssClass="xx_select"  empty="true"  emptyDy="false"/></td>
				<th style="width:10%;"><font>*</font>场所细类:</th>
				<td>
				        <select name="cslbxl" id="cslbxl" class="xx_select"></select>
				</td>
                         </tr>

          js部分:

	               //初始化细类的下拉框,第一个option默认为请选择
			$("#cslbxl").append("<option value=''>请选择</option>");
			//获取字典数据,,这个是后台传过来的json格式的对象
			var map = ${map};//d定义一个全局变量,后面要使用

                        //编辑时需要获取大类的代码,循环map 的key值,,和你获取的大类代码比较,如果相同,就把该大类下的细类取出即:map[i]
			for(var i in map){
				if("${gbZdcsJbxx.cslb }"==i)
				{
					showAppend(map[i]);
				}
			}

			//初始化查询下拉框  ,这部分是保留查询框的值不被丢失
			$(document).ready(function(){
				
				var cslbxl = "${gbZdcsJbxx.cslbxl}";
				selectValue("cslbxl",cslbxl);
			});

			//下拉框自动选值,name是下拉框列表的名字,value是选中的值
			function selectValue(name,value)
			{
				$("select[name='"+name+"']").val(value);
			}

			//循环json  ,这里是细类的json
			function appendCsxl(objs)
			{      
			          //初始化是请选择,,,
				  var trs = "<option value=''>请选择</option>";
				  if(objs != "")
				  {
				      //eval是把字符串的json转成对象
			             $.each(eval(objs), function (n, value) {
				      //拼接字符串
				       trs += "<option value=" + value.dm + ">" + value.mc + "</option>";
				   });
				  }
			      return trs;
			}


			//拼接字符串
			function showAppend(objs)
			{
			        //清除细类里的所有option标签
				$("#cslbxl").html("");
				//进行重新拼接
			       $("#cslbxl").append(appendCsxl(objs));
			}

			//场所细类,这个是判断大类是否已经选择,否则就提示请选择大类,防止空数据出现
			$("#cslbxl").click(function (){
				if($("#cslb").val() =="")
				{
					showAppend("");
					alert("请先选择场所类别!");
					$("#cslb").focus();
				}
			});

			//场所类别 ,大类的点击事件,,也就是所有的动作的开始
			$("#cslb").click(function(){
                                        //循环 map
					for(var i in map){
					        //根据用户所选的大类,获取对应的大类代码和map里的key进行比较
						if($("#cslb").val()==i)
						{
						       //如果相同就把对应的细类给showAppend,让这个函数处理,
							showAppend(map[i]);
						}
					}
				
			});


以上就是一个动态实现二级联动的效果,,,我刚开始以为不用写很多,,结果写着写着就不少了,,,没办法,功能需要



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值