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 相关文章推荐
AutoSave/自动存储功能实现
Mar 24 Javascript
jQuery操作input值的各种方法总结
Nov 21 Javascript
jQuery自定义事件的简单实现代码
Jan 27 Javascript
JS常用字符串处理方法应用总结
May 22 Javascript
jQuery中hover方法和toggle方法使用指南
Feb 27 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
Apr 22 Javascript
Bootstrap进度条组件知识详解
May 01 Javascript
深入理解Node中的buffer模块
Jun 03 Javascript
JavaScript实现简单图片轮播效果
Aug 21 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
Sep 03 jQuery
vue页面引入three.js实现3d动画场景操作
Aug 10 Javascript
字节飞书面试promise.all实现示例
Jun 16 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读取数据库信息的几种方法
2008/05/24 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
测试php函数的方法
2013/11/13 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
Python获取网段内ping通IP的方法
2019/01/31 Python
python3实现微型的web服务器
2019/09/03 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
师范应届生求职信
2013/11/15 职场文书
优秀信贷员先进事迹
2014/01/31 职场文书
文明礼仪标语
2014/06/13 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
肖申克救赎观后感
2015/06/02 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android