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 相关文章推荐
多浏览器兼容的获取元素和鼠标的位置的js代码
Dec 15 Javascript
简单的Jquery遮罩层代码实例
Nov 14 Javascript
JavaScript中创建字典对象(dictionary)实例
Mar 31 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
Feb 23 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
Dec 27 Javascript
ES6中Generator与异步操作实例分析
Mar 31 Javascript
详解webpack分包及异步加载套路
Jun 29 Javascript
Vue全家桶实践项目总结(推荐)
Nov 04 Javascript
如何在Angular应用中创建包含组件方法示例
Mar 23 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
Apr 07 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 jQuery
angular8.5集成TinyMce5的使用和详细配置(推荐)
Nov 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令牌 Token改进版
2008/07/18 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
php微信开发之图片回复功能
2018/06/14 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
python实现串口自动触发工作的示例
2019/07/02 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
实习教师自我鉴定
2013/12/12 职场文书
英文求职信写作小建议
2014/02/16 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
护士辞职信怎么写
2015/02/27 职场文书
党员个人自我评价
2015/03/03 职场文书
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏