父子窗体间传递JSON格式的数据的代码


Posted in Javascript onDecember 25, 2010

如果某个一级评分项包含评分子项,则点击该评分项时,再弹出一个新窗口,新窗体中列出了当前评分项的所有评分子项列表,供用户进行操作。用户操作完成后,点击“确定”按钮,则返回到父窗体,在子窗体中所有的操作结果,同时要带到父窗体中。同时,如果用户再次点击该评分项,则在弹出子窗体的同时,要将上次操作的结果绑定到对应的操作项上。

上面描述的例子,就涉及到了一个父子窗体间的数据传递。如何实现这一数据传递,当然有很多方法。这里只是记录一下在这个例子中我使用的方法。我的方法是在子窗体点击“确定”按钮时,将操作结果构造成json格式的字符串,通过调用父窗体上的方法:opener.方法(),将json格式数据传递到父窗体上。

此例中构造的json数据类似如下格式:

{"MyData":[

{"bh":"111","lx":"1","df":"10","bz":"aaa"},

{"bh":"112","lx":"2","df":"20","bz":"bbb"},

{"bh":"113","lx":"2","df":"30","bz":"ccc"}

]}

此处子项打分需要保持的分别是bh:编号;lx:类型;df:得分;bz:备注。

按照自己的需要,可以再自己增加需要保持的项。构造此json数据可以放在前台,也可以放在后台。

在此例中,我是放置后台的。代码如下:

StringBuilder jsonBuilder = new StringBuilder(); 
jsonBuilder.Append("@{\""); 
jsonBuilder.Append("MyData"); 
jsonBuilder.Append("\":["); int k = bh.Split(',').Length + 1; 
for (int i = 0; i < bh.Split(',').Length; i++) 
{ 
tem += "update KH_PFX set DF = '"+EncriptLib.EncriptLib.EncodeCode(Convert.ToDouble(df.Split(',')[i].ToString().Trim()))+"',"; 
tem += "BZ = '"+bz.Split(',')[i].ToString().Trim()+"',PFRXM = '"+Session["XM"].ToString()+"',"; 
tem += "PFRBH = '"+Session["YHBH"].ToString()+"',PFRQ = to_date('"+DateTime.Now.ToShortDateString()+"','yyyy-MM-dd')"; 
tem += " where BH = '"+bh.Split(',')[i].ToString().Trim()+"'"; 
tem += "?e"; //此处用此特殊的符号来分隔sql语句 
jsonBuilder.Append("{\"bh\":" + "\"" + bh.Split(',')[i].ToString().Trim() + "\"" + ","); 
jsonBuilder.Append("\"lx\":" + "\"" + lx.Split(',')[i].ToString().Trim() + "\"" + ","); 
jsonBuilder.Append("\"df\":" + "\"" + df.Split(',')[i].ToString().Trim() + "\"" + ","); 
jsonBuilder.Append("\"bz\":" + "\"" + bz.Split(',')[i].ToString().Trim() + "\"" + "},"); 
} 
if(tem != "") 
{ 
jsonBuilder.Remove(jsonBuilder.Length - 1, 1); 
jsonBuilder.Append("]"); 
jsonBuilder.Append("}"); 
Page.ClientScript.RegisterClientScriptBlock(GetType(), "cg", "<Script>window.close();opener.GetZXDF('zxdf" + Request.QueryString["bh"].ToString() + "','" + parent_df.Text.Trim() + "','" + jsonBuilder.ToString() + "',\"" + tem + "\");</Script>"); 
}

"@"符号可以防止在jsonBuilder.ToString()后,转义字符“\”的消失。

调用父窗体的GetZXDF()方法,将json数据传递给父窗体。

下面给出子窗体加载时,绑定json数据的代码

$(function() { //加载时获取json,然后绑定打分结果 
var obj = opener.GetJson($("#txt_YCBH").val()); 
if($.trim(obj) != ""){ 
obj = "(" + obj + ")"; 
obj = eval(obj); 
var data = obj.MyData; 
$.each(data, function(i, n) { 
if(n.lx == "1"){ 
//直接打分类的绑定 
$("#lx" + n.bh).siblings("input").eq(0).val(n.df); 
$("#lx" + n.bh).siblings("input").eq(1).val(n.df); 
$("#lx" + n.bh).parent().parent().next().children().children("textarea").val(n.bz); 
} 
if(n.lx == "2"){ 
//选项打分类的绑定 
$("#lx" + n.bh).siblings("input:text").eq(1).val(n.df); 
$("#lx" + n.bh).siblings("input:checkbox").each(function(){ 
if($.trim($(this).val()) == $.trim(n.df)){ 
$(this).attr("checked",true); 
} 
}); 
$("#lx" + n.bh).parent().parent().parent().next().children().children("textarea").val(n.bz); 
} 
});

opener.GetJson()方法是父窗体上用来向子窗体传递json数据的方法,代码如下:
//通过编号获取对应评分项的子项打分结果的json字符串 
function GetJson(p_bh) 
{ 

 //$("#zxdf" + p_bh).siblings("input").eq(1).val()中保存的就是子窗体传递给父窗体的json数据 
return $("#zxdf" + p_bh).siblings("input").eq(1).val(); 
}
Javascript 相关文章推荐
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
Jun 27 Javascript
基于Jquery实现的一个图片滚动切换
Jun 21 Javascript
使用JSLint提高JS代码质量方法分享
Dec 16 Javascript
动态加载脚本提升javascript性能
Feb 24 Javascript
JS截取url中问号后面参数的值信息
Apr 29 Javascript
JavaScript之Object类型介绍
Apr 01 Javascript
AngularJS实现的锚点楼层跳转功能示例
Jan 02 Javascript
react 应用多入口配置及实践总结
Oct 17 Javascript
react 中父组件与子组件双向绑定问题
May 20 Javascript
vue路由传参三种基本方式详解
Dec 09 Javascript
Node.js 在本地生成日志文件的方法
Feb 07 Javascript
Vue实现购物车基本功能
Nov 08 Javascript
javascript自执行函数之伪命名空间封装法
Dec 25 #Javascript
Ext对基本类型的扩展 ext,extjs,format
Dec 25 #Javascript
JQuery live函数
Dec 24 #Javascript
jquery 单击li防止重复加载的实现代码
Dec 24 #Javascript
基于jquery的关于动态创建DOM元素的问题
Dec 24 #Javascript
在JavaScript中获取请求的URL参数
Dec 22 #Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
Dec 22 #Javascript
You might like
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
浅析php-fpm静态和动态执行方式的比较
2016/11/09 PHP
xmlHTTP实例
2006/10/24 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
详解微信UnionID作用
2019/05/15 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
幼儿园小班家长寄语
2014/04/02 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
安全责任书模板
2014/07/22 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
商务司机岗位职责
2015/04/10 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
七年级数学教学反思
2016/02/17 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript