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中ajax和post处理json的不同示例对比
Nov 02 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
Apr 16 Javascript
JS解析XML文件和XML字符串详解
Apr 17 Javascript
酷! 不同风格页面布局幻灯片特效js实现
Feb 19 Javascript
AngularJS中的JSONP实例解析
Dec 01 Javascript
Vue实现动态响应数据变化
Apr 28 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
再谈Angular4 脏值检测(性能优化)
Apr 23 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
Jun 28 Javascript
微信小程序图片左右摆动效果详解
Jul 13 Javascript
javascript实现点击小图显示大图
Nov 29 Javascript
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
PHP set_time_limit(0)长连接的实现分析
2010/03/02 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
javascript实现时钟动画
2020/12/03 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
python中readline判断文件读取结束的方法
2014/11/08 Python
浅谈python中set使用
2016/06/30 Python
python实现神经网络感知器算法
2017/12/20 Python
PyQt5每天必学之进度条效果
2018/04/19 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
python openpyxl模块的使用详解
2021/02/25 Python
英国家用电器购物网站:Hughes
2018/02/23 全球购物
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
几道PHP的面试题
2012/05/19 面试题
安全环保标语
2014/06/09 职场文书
党员批评与自我批评
2014/10/15 职场文书
毕业证明模板
2015/06/19 职场文书
PHP遍历数组的6种方式总结
2021/11/17 PHP