JQuery打造省市下拉框联动效果


Posted in Javascript onMay 18, 2014

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

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); 
}
Javascript 相关文章推荐
Prototype Object对象 学习
Jul 12 Javascript
jQuery Dialog 弹出层对话框插件
Aug 09 Javascript
js 自动播放的实例代码
Nov 19 Javascript
qq悬浮代码(兼容各个浏览器)
Jan 29 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
Mar 21 Javascript
浅析javascript函数表达式
Feb 10 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
Sep 01 Javascript
AngularJS入门教程之过滤器用法示例
Nov 02 Javascript
在vue-cli项目中使用bootstrap的方法示例
Apr 21 Javascript
详解微信小程序之提高应用速度小技巧
Jan 07 Javascript
vue监听dom大小改变案例
Jul 29 Javascript
微信小程序自定义tabBar的踩坑实践记录
Nov 06 Javascript
通过$(this)使用jQuery包装后的方法或属性
May 18 #Javascript
用jquery实现的一个超级简单的下拉菜单
May 18 #Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
May 18 #Javascript
绑定回车enter事件代码
May 18 #Javascript
javascript的alert box在java中如何显示多行
May 18 #Javascript
JSON+HTML实现国家省市联动选择效果
May 18 #Javascript
让alert不出现弹窗的两种方法
May 18 #Javascript
You might like
PHP Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
js html实现计算器功能
2018/11/13 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
python文件比较示例分享
2014/01/10 Python
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
Python3爬虫全国地址信息
2019/01/05 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
个人能力自我鉴赏
2014/01/25 职场文书
渡河少年教学反思
2014/02/12 职场文书
法人授权委托书
2014/04/03 职场文书
演讲比赛主持词
2015/06/29 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript