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 相关文章推荐
一个多次搜索+多次传值的解决方案
Jan 20 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
Nov 28 Javascript
node.js中的fs.chown方法使用说明
Dec 16 Javascript
关于JavaScript和jQuery的类型判断详解
Oct 08 Javascript
AngularJS入门教程之MVC架构实例分析
Nov 01 Javascript
微信小程序request出现400的问题解决办法
May 23 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
JS实现的简单表单验证功能示例
Oct 13 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
Mar 12 Javascript
seajs下require书写约定实例分析
May 16 Javascript
angularjs结合html5实现拖拽功能
Jun 25 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
Sep 04 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
Syphon 使用方法
2021/03/03 冲泡冲煮
php解压文件代码实现php在线解压
2014/02/13 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
jQuery checkbox全选/取消全选实现代码
2009/11/14 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
python从ftp下载数据保存实例
2013/11/20 Python
python中的sort方法使用详解
2014/07/25 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
详解python 注释、变量、类型
2018/08/10 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
医学生自我鉴定范文
2013/11/08 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技