• JQuery打造下拉框联动效果


    做联动效果,若是用纯JavaScript来做,往往须要辅助页面保存须要刷新的结果集,然后渲染到原页面。考虑将须要动态刷新的内容自己主动拼接到前一个下拉框之后,当前一个下拉框onchange后,同级的后面的下拉框所有清除,然后又一次拼接刷新的内容。用JQuery实现比較easy,代码以省市联动效果为例实现。

    JSP页面代码例如以下:

    <li id="base">
    	<p>生源地:</p>
    	<label>
               <select id="provinceCode" name="provinceCode" onchange="refreshCity()">
    		<option value="">所有</option>
    		<c:forEach items="${provinceInfoList}" var="provinceInfo">
    			<option value="${provinceInfo.code}">${provinceInfo.provinceName}</option>
    		</c:forEach>
    	   </select>
            </label>	  			
     </li>
    JavaScript代码例如以下:

    function refreshCity(){
    	if($('#provinceCode').find('option:selected').val() == ""){
    		$('#provinceCode').parent().nextAll('lable').remove();
    		return;
    	}	
    	//省份名称
    	var provinceName = $('#provinceCode').find('option:selected').text();
    	provinceName = provinceName.substring(0,provinceName.length-4);	
    	// 发出Json请求,查询子下拉框选项数据
    	 $.getJSON("<%=basePath%>baseInfo_getCitiesByProvinceId", {
    		 proviceCode : $('#provinceCode').val()
    	}, function(data) {		
    		// 假设有子选项,则创建子下拉框
    		if(data != null){			
    			// 删除下拉框父级<lable>后的全部同级<lable>
    			$('#provinceCode').parent().nextAll('lable').remove();
    			var childId = "city";
    			// 推断是否存在下一级下拉框 不存在就创建
    			if($('#'+childId).length == 0){				
    				// 创建一个<li>并创建一个<select>加入到id为extra的<ul>中
    				$("<lable><select id='"+childId+"' name='"+childId+"' ></select></li>").appendTo($('#base'));
    			}else{
    				//清空子下拉框内容
    				 $('#' + childId).empty();
    			}			
    			// 遍历json串,填充子下拉框
    			$.each(data.city, function(i, item) {
    				$('#' + childId).append(
    						"<option value='"+item.code+"'>" + item.nameAndCode
    								+ "</option>");
    			});
    		}		
    	});	
    }
    依据省份获取市的代码例如以下:

    public void getCitiesByProvinceCode(String proviceCode, HttpServletResponse response) throws JsonParseException, JsonMappingException, JSONException, IOException{
    	ProvinceInfo provinceInfo = this.provinceAndCityInfoService.getProvinceInfoByProperty("code", proviceCode);
    	List<CityInfo> cityList = this.provinceAndCityInfoService.getCityListByProperty("belongProvinceId", provinceInfo.getId()+"");	
    	// 初始化准备输出的Json串
    	String cityJson = "";
    	// 遍历集合,构造json串
    	if (cityList.size() > 0) {			
    		cityJson = "{"city":[";		
    		// 拼接查询到的子项
    		for (int i = 0; i < cityList.size(); i++) {
    			CityInfo city = cityList.get(i);
    			String temp = "{"code":"" + city.getCode()
    					+ "","nameAndCode":"" + city.getName()+"("+ city.getCode() +")"
    					+ ""}";
    			// 假设是集合中最后一项,则拼接结束符,否则用","隔开
    			if (i == cityList.size() - 1) {
    				cityJson = cityJson + temp + "]}";
    			} else {
    				cityJson = cityJson + temp + ",";
    			}
    		}
    	}
    	// 设置输出的字符集和类型并输出json串
    	response.setCharacterEncoding("UTF-8");
    	response.setContentType("json");
    	response.getWriter().print(cityJson);
    }





  • 相关阅读:
    Markdown编辑器:Typora
    Makefile的编写
    【转】Java基础——成员变量、局部变量和静态变量的区别
    【转】jsp 和 servlet的联系和区别
    【转】keySet和entrySet的区别
    10月25日下午PHP静态、抽象、接口
    10月25日上午PHP继承多态
    10月24日下午PHP封装
    10月24日上午PHP面向对象
    MYSQL存储过程、游标、触发器
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3834470.html
Copyright © 2020-2023  润新知