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学习随笔(使用window和frame)的技巧
Mar 08 Javascript
一个cssQuery对象 javascript脚本实现代码
Jul 21 Javascript
关于可运行代码无法正常执行的使用说明
May 13 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
Jan 03 Javascript
通过正则表达式实现表单验证是否为中文
Feb 18 Javascript
js中自定义方法实现停留几秒sleep
Jul 11 Javascript
实现无刷新联动例子汇总
May 20 Javascript
学习javascript面向对象 理解javascript原型和原型链
Jan 04 Javascript
JavaScript实现的MD5算法完整实例
Feb 02 Javascript
基于Vue开发数字输入框组件
Dec 19 Javascript
JS通过识别id、value值对checkbox设置选中状态
Feb 19 Javascript
vue实现短信验证码输入框
Apr 17 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
smarty实现多级分类的方法
2014/12/05 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python网络编程实例简析
2014/09/26 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python如何实现转换URL详解
2019/07/02 Python
python读取与处理netcdf数据方式
2020/02/14 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
2014财务年度工作总结
2014/11/11 职场文书
2014年教研室工作总结
2014/12/06 职场文书
优秀员工推荐材料
2014/12/20 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
带你了解CSS基础知识,样式
2021/07/21 HTML / CSS