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 相关文章推荐
Cookie 小记
Apr 01 Javascript
理解Javascript_10_对象模型
Oct 16 Javascript
JS获取键盘上任意按键的值(实例代码)
Nov 12 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 25 Javascript
AngularJs html compiler详解及示例代码
Sep 01 Javascript
BOM之navigator对象和用户代理检测
Feb 10 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
Aug 24 Javascript
vue全局使用axios的方法实例详解
Nov 22 Javascript
详解如何使用webpack打包多页jquery项目
Feb 01 jQuery
Vue 3.x+axios跨域方案的踩坑指南
Jul 04 Javascript
微信小程序实现下拉框功能
Jul 16 Javascript
koa-passport实现本地验证的方法示例
Feb 20 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
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
python写入中英文字符串到文件的方法
2015/05/06 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
让python在hadoop上跑起来
2016/01/27 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
Keras自定义IOU方式
2020/06/10 Python
python实现计算图形面积
2021/02/22 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
爷爷追悼会答谢词
2014/01/24 职场文书
美德好少年主要事迹
2014/01/29 职场文书
爱岗敬业演讲稿
2014/05/05 职场文书
节能宣传周活动总结
2014/05/08 职场文书
会计专业自荐信
2014/06/03 职场文书
钢琴师观后感
2015/06/12 职场文书
课改心得体会范文
2016/01/25 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android
MySQL创建管理RANGE分区
2022/04/13 MySQL