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 04 Javascript
基于JQuery实现异步刷新的代码(转载)
Mar 29 Javascript
在JavaScript中处理字符串之link()方法的使用
Jun 08 Javascript
javascript封装的sqlite操作类实例
Jul 17 Javascript
JS实现的Select三级下拉菜单代码
Aug 20 Javascript
JavaScript中transform实现数字翻页效果
Mar 08 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
Nov 15 Javascript
2种在vue项目中使用百度地图的简单方法
Sep 28 Javascript
element-ui的回调函数Events的用法详解
Oct 16 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
Dec 03 Javascript
Vue3.0结合bootstrap创建多页面应用
May 28 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
Nov 26 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禁止页面缓存的代码
2011/10/23 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
模拟select的代码
2011/10/19 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
详解Python中的Descriptor描述符类
2016/06/14 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
Python实现序列化及csv文件读取
2020/01/19 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
远程调用的原理
2014/07/05 面试题
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
怎么写有吸引力的自荐信
2013/11/17 职场文书
房屋继承公证书
2014/04/10 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
质量月活动总结
2014/08/26 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
毕业典礼主持词
2015/06/29 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers