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 相关文章推荐
浅谈JavaScript之事件绑定
Jul 08 Javascript
jquery实现动态菜单的实例代码
Nov 28 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
Aug 26 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
May 26 Javascript
JS触发服务器控件的单击事件(详解)
Aug 06 Javascript
js表单元素checked、radio被选中的几种方法(详解)
Aug 22 Javascript
微信小程序 五星评价功能的实现
Mar 09 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
p5.js入门教程和基本形状绘制
Mar 15 Javascript
微信小程序调用摄像头隐藏式拍照功能
Aug 22 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
Sep 05 Javascript
Vue 组件复用多次自定义参数操作
Jul 27 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
sphinx增量索引的一个问题
2011/06/14 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
美国时尚在线:Showpo
2017/09/08 全球购物
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
家长评语大全
2014/01/22 职场文书
公司端午节活动方案
2014/02/04 职场文书
保证书范文大全
2014/04/28 职场文书
早读课迟到检讨书
2014/09/25 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
论语读书笔记
2015/06/26 职场文书