父子窗体间传递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 相关文章推荐
js实现点击图片改变页面背景图的方法
Feb 28 Javascript
深入理解Java线程编程中的阻塞队列容器
Dec 07 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
Jan 05 Javascript
js去字符串前后空格的实现方法
Feb 26 Javascript
归纳下js面向对象的几种常见写法总结
Aug 24 Javascript
canvas时钟效果
Feb 16 Javascript
微信小程序简单实现form表单获取输入数据功能示例
Nov 30 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
Nov 13 Javascript
React父子组件间的传值的方法
Nov 13 Javascript
解决layUI的页面显示不全的问题
Sep 20 Javascript
对layui数据表格动态cols(字段)动态变化详解
Oct 25 Javascript
vue实现移动端图片上传功能
Dec 23 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
CI框架入门之MVC简单示例
2016/11/21 PHP
Smarty3配置及入门语法
2017/02/22 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
js 动态选中下拉框
2009/11/26 Javascript
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
2017/08/03 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
Python中文竖排显示的方法
2015/07/28 Python
python使用opencv读取图片的实例
2017/08/17 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
django 将model转换为字典的方法示例
2018/10/16 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
python中Lambda表达式详解
2019/11/20 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
2013英文求职信模板范文
2013/11/15 职场文书
积极向上的团队口号
2014/06/06 职场文书
稽核岗位职责范本
2015/04/13 职场文书
校长一岗双责责任书
2015/05/09 职场文书
退休欢送会致辞
2015/07/31 职场文书
严以用权学习心得体会
2016/01/12 职场文书
七个Python必备的GUI库
2021/04/27 Python
Html5生成验证码的示例代码
2021/05/10 Javascript
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs