jquery怎样实现ajax联动框(二)


Posted in Javascript onMarch 08, 2013

另一种形式的联动框,右边的联动框用jquery生成
jquery怎样实现ajax联动框(二) 
这是仿照上篇的js方法修改的
先看下页面代码:

<tr id="sfqySelect"> 
<td width="100" class="t_r prten field_c">事发区域:</td> 
<td width="131"> 
<select class="building"></select> 
</td> 
<td width="10"></td> 
<td width="131"> 
<input id="choose_floor" class="text_k choose_floor" type="text" value="点击选择楼层"> 
<input class="choose_floor_hidden FL {validate:{required:true}}" type="hidden" name="geoareaid" value=""> 
<div id="floorNum" class='floorNum'></div> 
</td> 
</tr>

页面调用的js:
<script type="text/javascript" src="${rc.contextPath}/js/jquery.building.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
$("#sfqySelect").building({ 
nodata:"none", 
required:true, 
buildingUrl:'${rc.contextPath}/repair/loadBuildings', 
floorUrl:'${rc.contextPath}/repair/loadFloors', 
clickCallback:function(value,text,other){ 
moveGis(other); 
} 
}); 
}); 
</script>

对应的 jquery.building.js 文件如下:
/* 
Ajax 三级联动 
日期:2013-2-26 
settings 参数说明 
----- 
buildingUrl:大楼下拉数据获取URL,josn返回 
buildingValue:默认大楼下拉value 
floorUrl:楼层数据获取URL,josn返回 
floorValue:默认楼层value 
nodata:无数据状态 
required:必选项 
clickCallback:点击时的回调函数 
------------------------------ */ 
(function($){ 
$.fn.building=function(settings){ 
if($(this).size()<1){return;}; 
// 默认值 
settings=$.extend({ 
buildingUrl:"js/city.min.js", 
floorUrl:"js/city.min.js", 
buildingValue:null, 
floorValue:null, 
nodata:null, 
required:true, 
clickCallback:function(){} 
},settings); 
var box_obj=this; 
var building_obj=box_obj.find(".building"); 
var floor_obj=box_obj.find(".choose_floor"); 
var floorHidden_obj=box_obj.find(".choose_floor_hidden"); 
var floorPanel_obj=box_obj.find("#floorNum"); 
var select_prehtml=(settings.required) ? "" : "<option value=''>请选择</option>"; 
var prepareSelectHtml=function(jsonArray){ 
var temp_html=select_prehtml; 
$.each(jsonArray,function(index,row){ 
temp_html+="<option value='"+row.value+"'>"+row.text+"</option>"; 
}); 
return temp_html; 
}; 
var prepareFloorPanelHtml=function(jsonArray){ 
var temp_html='<table id="floor_table" cellpadding="0" cellspacing="0">'; 
var count=0; 
$.each(jsonArray,function(index,row){ 
if(count==0){ 
temp_html+='<tr>'; 
} 
var otherAttr=""; 
if(row.other){ 
otherAttr="other="+row.other+""; 
} 
temp_html+='<td '+otherAttr+' floorId='+row.value+'>'+row.text+'</td>'; 
if(count>0&&count%3==0){ 
temp_html+='</tr>'; 
count=-1; 
} 
count=count+1; 
}); 
temp_html+='</table>'; 
return temp_html; 
}; 
// 赋值二级下拉框函数 
var createFloorPanel=function(){ 
floor_obj.val('点击选择楼层'); 
floorHidden_obj.val(''); 
//floorPanel_obj.empty(); 
if(building_obj.val()==''){ 
return; 
} 
$.getJSON(settings.floorUrl, { buildingId: building_obj.val(), time: new Date().getTime() }, function(jsonResult){ 
if(!jsonResult.success){ 
if(settings.nodata=="none"){ 
floorPanel_obj.css("display","none"); 
}else if(settings.nodata=="hidden"){ 
floorPanel_obj.css("visibility","hidden"); 
}; 
return; 
} 
// 遍历赋值二级下拉列表 
floorPanel_obj.html(prepareFloorPanelHtml(jsonResult.data)); 
floorPanel_obj.find('td').click(function(){ 
//hide 
var text = $(this).html(); 
var value = $(this).attr("floorId"); 
var other =$(this).attr("other"); 
floor_obj.val(text); 
floorHidden_obj.val(value); 
floorPanel_obj.css("display","none"); 
settings.clickCallback(value,text,other); 
}); 
/*$('body').filter('.choose_floor').click(function(){ 
alert(1) 
floorPanel_obj.css("display","none"); 
}); */ 
}); }; 
var init=function(){ 
// 遍历赋值一级下拉列表 
$.getJSON(settings.buildingUrl, {time: new Date().getTime() }, function(jsonResult){ 
if(!jsonResult.success){ 
return; 
} 
// 遍历赋值一级下拉列表 
building_obj.html(prepareSelectHtml(jsonResult.data)); 
createFloorPanel(); 
// 若有传入大楼与楼层的值,则选中。(setTimeout为兼容IE6而设置) 
setTimeout(function(){ 
if(settings.buildingValue && settings.buildingValue.length>0){ 
building_obj.val(settings.buildingValue); 
createFloorPanel(); 
setTimeout(function(){ 
if(settings.floorValue!=null){ 
floor_obj.val(settings.floorValue); 
}; 
},1); 
}; 
},1); 
}); 
// 选择一级时发生事件 
building_obj.bind("change",function(){ 
createFloorPanel(); 
}); 
floor_obj.click(function(){ 
//show 
//alert(floorPanel_obj.html()) 
//floorPanel_obj.css("height","100px"); 
//floorPanel_obj.css("width","100px"); 
//floorPanel_obj.css('floorNum'); 
floorPanel_obj.css("display","block"); 
}); 
}; 
// 初始化第一个下拉框 
init(); 
}; 
})(jQuery);

后台处理请求及返回json数据:
@RequestMapping("loadBuildings") 
@ResponseBody 
public Map<String, Object> loadBuildings(ModelMap model){ 
String msg = ""; 
boolean isSuccess = false; 
List<Map<String, String>> maps=new ArrayList<Map<String,String>>(); 
try { 
List<GeoArea> buildings= geoAreaService.findBuildings(); 
for (GeoArea building : buildings) { 
Map<String,String> map=new HashMap<String, String>(); 
map.put("value", building.getId().toString()); 
map.put("text", building.getName()); 
maps.add(map); 
} 
msg = "查找大楼成功。"; 
isSuccess=true; 
} catch (Exception e) { 
msg = "查找大楼失败。"; 
log.error("查找大楼失败:" + e.getMessage(), e); 
} 
return buildAjaxResult(isSuccess, msg,maps); 
} 
@RequestMapping("loadFloors") 
@ResponseBody 
public Map<String, Object> loadFloors(@RequestParam("buildingId")Integer buildingId,ModelMap model){ 
String msg = ""; 
boolean isSuccess = false; 
List<Map<String, String>> maps=new ArrayList<Map<String,String>>(); 
try { 
List<GeoArea> floors= geoAreaService.findFloorById(buildingId); 
for (GeoArea floor : floors) { 
Map<String,String> map=new HashMap<String, String>(); 
map.put("value", floor.getId().toString()); 
map.put("text", floor.getName()); 
map.put("other", floor.getCode()); 
maps.add(map); 
} 
msg = "查找楼层成功。"; 
isSuccess=true; 
} catch (Exception e) { 
msg = "查找楼层失败。"; 
log.error("查找楼层失败:" + e.getMessage(), e); 
} 
return buildAjaxResult(isSuccess, msg,maps); 
} 
protected Map<String, Object> buildAjaxResult(boolean isSuccess, String msg, Object data) { 
Map<String, Object> resultMap = new HashMap<String, Object>(); 
resultMap.put("success", isSuccess); 
resultMap.put("msg", msg); 
resultMap.put("data", data); 
return resultMap; 
}

搞定!
Javascript 相关文章推荐
简单的js分页脚本
May 21 Javascript
Jquery实现页面加载时弹出对话框代码
Apr 19 Javascript
在百度知道团队中快速审批新成员的js脚本
Feb 02 Javascript
使用jquery 简单实现下拉菜单
Jan 14 Javascript
js设置document.domain实现跨域的注意点分析
May 21 Javascript
Angular开发者指南之入门介绍
Mar 05 Javascript
socket.io学习教程之深入学习篇(三)
Apr 29 Javascript
详解Vue中状态管理Vuex
May 11 Javascript
深究AngularJS之ui-router详解
Jun 13 Javascript
详解vue如何使用rules对表单字段进行校验
Oct 17 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
Sep 27 Javascript
JS实现可以用键盘方向键控制的动画
Dec 11 Javascript
jquery怎样实现ajax联动框(一)
Mar 08 #Javascript
实现点击列表弹出列表索引的两种方式
Mar 08 #Javascript
很好用的js日历算法详细代码
Mar 07 #Javascript
Javascript查询DBpedia小应用实例学习
Mar 07 #Javascript
JS链式调用的实现方法
Mar 07 #Javascript
jQuery滚动加载图片效果的实现
Mar 06 #Javascript
HTML上传控件取消选择
Mar 06 #Javascript
You might like
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
中止javascript执行的方法
2014/02/14 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
python在文本开头插入一行的实例
2018/05/02 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
回门宴父母答谢词
2014/01/26 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
办公室岗位职责
2015/02/04 职场文书
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL