JavaScript Ajax Json实现上下级下拉框联动效果实例代码


Posted in Javascript onNovember 23, 2013

最近尝试做出一个部门和人员的下拉框联动功能,部门和人员的对应关系是1:N

<div class="forntName">部门</div>
 <div class="inpBox">
 <select  name="department" id="department"  onchange="change();" style="width:200px;" >
 <option value='-1'>请选择</option>
 <s:iterator value="departmentList">
  <option value='<s:property value="departmentCode"/>'><s:property value="departmentName"/></option>
 </s:iterator>
 <select>  
 </div>
<SPAN style="WHITE-SPACE: pre"> </SPAN><div class="forntName">人员</div>
 <div class="inpBox">
 <select name="workorderOperator" id = "workorderOperator" style="width:200px;"> <s:iterator value="userList">
  <option value='<s:property value="userName"/>'><s:property value="userName"/></option>
 </s:iterator>
 </select>
 </div>

部门下拉框的onchange()事件走一个AJAX方法,返回一个JSON对象(JSON里放的是个LIST)。

js方法在此页面的写法:

<script type="text/javascript">
function change(){     
    var departmentCode =$("#department").val();      var params = {  
        'departmentCode':departmentCode  
    };  
    $.ajax({
        type: 'get',
        url: "departmentChangeEvent.shtml",
        cache: false,
        data: params,
        dataType: 'json',
        success: function(data){
      var sel2 = $("#workorderOperator");  
      sel2.empty();  
      if(data==null)
          {
       sel2.append("<option value = '-1'>"+"部门人员为空"+"</option>");
          }
      var items=data.list;
      if(items!=null)
         {
        for(var i =0;i<items.length;i++)
           {
            var item=items[i];
            sel2.append("<option value = '"+item.userName+"'>"+item.userChinesename+"</option>");
           };
          }     
      else
          {
       sel2.empty();  
          }
        },
        error: function(){
            return;
        }
    });
    //$.post(url, params, callback);  
}  
</script> 

此处返回的data里包含list(list见后文),list里包含着人员的代码,人员的姓名两个属性。然后先把人员下拉框empty(),通过select控件append方法 添加新的下拉框元素。

后台代码:

public String departmentChangeEvent() throws Exception{
  userList=service.queryForList("Workorder.queryUserByDepartmentCode", departmentCode);
  if(userList!=null&&userList.size()>0)
  {
   HttpServletResponse response = ServletActionContext.getResponse();
   response.setContentType("text/html;charset=utf-8");
   response.setHeader("Pragma","No-cache");
   response.setHeader("Cache-Control","no-cache");
   response.setHeader("Cache-Control", "no-store");
   PrintWriter writer = response.getWriter();
   JSONObject json = new JSONObject();
   Map map = new HashMap();
      map.put("list",userList);
      JSONObject jso = JSONObject.fromObject(map);
   writer.write(jso.toString());
      writer.flush();
      writer.close();  }
         return null;  
   } 

这个方法是部门切换事件,通过departmentCode(field域,有set,get)来求的当前部门下的用户放到userList中。

然后通过标准写法把userList放到一个定义好的HashMap中,KEY为list。

<STRONG> JSONObject jso = JSONObject.fromObject(map);</STRONG> 

这是最为关键的一步,有的json对象创建方法也可以为JSONObject jso = new JSONObject() ; 然后把list里的记录放入到jso中。。。

在这里是行不通的,前台会认为返回的是个字符串。。。

struts中 返回类型为json

  <action name="departmentChangeEvent" class="workorderAction" method="departmentChangeEvent"> 
       <result type="json">
   </result> 
        </action>
Javascript 相关文章推荐
找到了一篇jQuery与Prototype并存的冲突的解决方法
Aug 29 Javascript
JS 有名函数表达式全面解析
Mar 19 Javascript
javascript校验价格合法性实例(必须输入2位小数)
May 05 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
Mar 03 Javascript
js弹出对话框方式小结
Nov 17 Javascript
JavaScript函数内部属性和函数方法实例详解
Mar 17 Javascript
JavaScript中点击事件的写法
Jun 28 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
Sep 05 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
Mar 08 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
Apr 27 Javascript
详解小程序输入框闪烁及重影BUG解决方案
Aug 31 Javascript
小程序实现上传视频功能
Aug 18 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
Nov 22 #Javascript
js获取电脑分辨率的思路及操作
Nov 22 #Javascript
JS+CSS 制作的超级简单的下拉菜单附图
Nov 22 #Javascript
Mac/Windows下如何安装Node.js
Nov 22 #Javascript
javascript Event对象详解及使用示例
Nov 22 #Javascript
js Date概念详细介绍
Nov 22 #Javascript
页面定时刷新(1秒刷新一次)
Nov 22 #Javascript
You might like
在线增减.htpasswd内的用户
2006/10/09 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
扩展String功能方法
2006/09/22 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
Vue Element 分组+多选+可搜索Select选择器实现示例
2018/07/23 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
js实现内置计时器
2019/12/16 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
Python中的self用法详解
2019/08/06 Python
python sorted函数的小练习及解答
2019/09/18 Python
Python程序控制语句用法实例分析
2020/01/14 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
领导调研接待方案
2014/02/27 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
公历12个月名称的由来
2022/04/12 杂记