转自:http://blog.csdn.net/xinyueyuli/article/details/509893

最近项目开发中需要子窗口和父窗口交互的内容,基本上无非就是把子窗口的信息传递给父窗口,并且关闭自己等等,或者是父窗口把自己的信息传递给子窗口等等。

1。父窗口传递信息给子窗口

看代码实例:

  1. <script language=javascript>
  2.  
  3. function outPut()
  4. {
  5. //获取父窗口的文本信息赋值给text
  6. var text = document.abc.text.value;
  7. //打开子窗口,并且把操作句柄赋值给win变量,以下所有操作都是针对win对象的
  8. var win = window.open("","mywin", "menubar=no,width=400,height=100,resizeable=yes");
  9. //输出基本信息
  10. win.document.writeln("<title>输出结果</title>");
  11. win.document.writeln("你的信息是:<p>");
  12. //输出从父窗口获取的信息
  13. win.document.writeln(text);
  14. win.document.close();
  15. win.focus();
  16. }
  17. </script>
  18.  
  19. <form name=abc method=post>
  20. <input type=text name=text size=50>
  21. //调用上面的函数
  22. <input type=button value=提交 onClick="outPut()">
  23.  
  24. </form>

2。子窗口传递参数给父窗口

我们对上面的代码进行改造:

  1. <script language=javascript>
  2.  
  3. function outPut()
  4. {
  5. var text = document.abc.text.value;
  6. var win = window.open("","mywin", "menubar=no,width=400,height=100,resizeable=yes");
  7. win.document.writeln("<title>输出结果</title>");
  8. win.document.writeln("你的信息是:<p>");
  9. win.document.writeln(text);
  10. win.document.writeln("<input type=text name=child value=子窗口信息>");
  11.  
  12. //对子窗口本身操作,使用self对象,对父窗口操作使用opener对象,这是关键
  13. //把子窗口中表单的值回传给父窗口,取代父窗口表单以前的值,然后关闭子窗口
  14. win.document.writeln("<input type=button value=关闭自己 onClick='window.opener.abc.text.value=self.child.value;self.close()'>");
  15. //可以控制关闭父窗口
  16. win.document.writeln("<input type=button value=关闭父窗口 onClick='window.opener.opener=null;window.opener.close()'>");
  17. //刷新父窗口
  18. win.document.writeln("<input type=button value=刷新父窗口 onClick='window.opener.location.reload()'>");
  19.  
  20. win.document.close();
  21. win.focus();
  22. }
  23. </script>
  24.  
  25. <form name=abc method=post>
  26. <input type=text name=text size=50>
  27. <input type=button value=提交 onClick="outPut()">
  28.  
  29. </form>

3。不是同页面的子窗口和父窗口交互

假设我们涉及到外部程序,比如php、asp等等,那么我们处理的可能是两个页面,比如,上传功能,我们就是需要打开一个新页面,然后再把新页面中的值传递给父页面。

局部代码实例:

  1. <input type="input" value="" name="input_tag" id = "input_tag" onKeyUp="clearPreTagStyle()" size="40">
  2. <input type="hidden" value="0" name="tagid" id="tagid">
  3. <input type="button" value="标签" onclick="popUpWindow('tag.php?tag='+escape(document.tryst_form.input_tag.value))">

以上是父窗口的部分代码,里面的popUpWindow是封装好的window.open函数,所以理解面面的tag.php是另外一个页面就可以,我们需要把当前表单中的值提交给tag.php页面去处理。

tag.php部分代码:

查询标签结果:
<a href="#" name="tag_1">生活</a><a href="#" onclick="opener.document.tryst_form.input_tag.value = document.tag_1.innerHTML">加入该标签</a>

<a href="#" name="tag_2">生活秀</a><a href="#" onclick="opener.document.tryst_form.input_tag.value = document.tag_2.innerHTML">加入该标签</a>

这个就是我们的子窗口,我们要把tag_1和tag_2返回到子窗口中,虽然他们不是同一个页面。这里有个知识点,就是我们如何获取连接中的值,我们使用innerHTML属性:document.tag_2.innerHTML 这个就是我们获取了tag_2的值“生活秀”,我们也能使用其他方法获取,比如:document.all.tag_2.innerHTML,或者this.innerHTML就是指本身的链接的值。

访问父窗口也是使用opener对象来处理:opener.document.tryst_form.input_tag.value,就能够改变父窗口的值。

基本我目前了解就是如此,以后有东西继续添加。

引自:http://spaces.msn.com/members/zhouou/Blog/cns!1p7fuLt_OKc7K70nFQusQa4Q!159.entry

【转】JavaScript实际应用:父子页面交互的更多相关文章

  1. layui框架中layer父子页面交互的方法分析

    本文实例讲述了layui框架中layer父子页面交互的方法.分享给大家供大家参考,具体如下: layer是一款近年来备受青睐的web弹层组件,官网地址是:http://layer.layui.com/ ...

  2. 原 layer父子页面交互

    1.访问父页面元素值 2.访问父页面方法 3.如何关闭弹出的子页面窗口 parent.layer.close(index);//关闭弹出的子页面窗口 4.如何从子页面执行刷新父页面操作 [javasc ...

  3. layer弹出层父子页面交互(子页面form表单提交)

    例如:父页面中有数据需要修改,但不需要跳转到下一个页面进行处理 例图:

  4. javascript父、子页面交互小结

    帧用来存放子页面,既可以是iframe,又可以是frameset.window对象是全局对象,页面上的一切函数和对象都在它的作用域里.     1.parent代表父窗口.如果父窗口又存在若干层嵌套, ...

  5. iframe父子页面之间相互调用元素和函数

    <!doctype html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. 【JavaScript】父子页面之间跨域通信的方法

    由于同源策略的限制,JavaScript跨域的问题,一直是一个比较棘手的问题,为了解决页面之间的跨域通信,大家煞费苦心,研究了各种跨域方案.之前也有小网同学分享过一篇“跨域,不再纠结” 开始照着尝试时 ...

  7. JQuery javascript实现父子页面相互调用

    javascript实现父子页面相互调用 By:授客 QQ:1033553122 场景1 父页面调用子页面 如上图,在iframe子页面的<script>元素中,定义了taskStatus ...

  8. JavaScript 父子页面相互调用总结

    父子页面相互调用是一个在开发中经常遇到的问题,但是没有找到过比较全面的文章介绍.在此总结下来,供大家参考. 四种方式 一般情况下,我们可以使用iframe.window的open.showModalD ...

  9. javascript语法 1.运算符 2. 流程控制 3. 函数 4. 四种变量 5. 数据类型的运用 6. js页面交互

    1.运算符 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

随机推荐

  1. Emacs常用命令

    1.离开Emacs 挂起Emacs C-z 退出Emacs C-x C-c 2.文件 打开文件 C-x C-f 保存文件 C-x C-s 保存所有的文件 C-x s 将一个文件的内容插入到当前buff ...

  2. Date and Time

    The PHP date() function is used to format date and/or a time and formats as timestamp to a more read ...

  3. 升级IOS 9 和 XCode 7 引起的问题

    问题一: 升级xcode 7最低的系统配置要求 升级了ios9 后使用 xcode 6.1 已经不能用了,必须升级 xcode 7才行,原先的系统是OSX 10.10.1 版本.而xcode 7.0 ...

  4. 20145210姚思羽《Java程序设计》实验一实验报告

    实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验知识点 1. ...

  5. show master status empty解决方案

    The following MySQL error might occur if you are using MySQL replication and binary logs. mysql> ...

  6. iOS学习笔记---C语言第五天

    二维数组   字符串数组   多维数组 二维数组的定义 类型  数组[常量表达式1][常量表达式2]={值1,值2...}; int a[2][3] = {7,8,3,2,8,5}; #import ...

  7. CentOS 6.2 OpenVPN 搭建

    一.yum 安装. 二.下载 easy-rsa 3.0 三.生成根证书.服务器.客户端证书.ta 生成流程: wget -c https://github.com/OpenVPN/easy-rsa/a ...

  8. Android高效加载大图,多图解决方案,有效避免程序OOM异常

    收藏自:http://blog.csdn.net/guolin_blog/article/details/9316683 谷歌官方文档:http://developer.android.com/tra ...

  9. SM30维护视图添加按钮

    转自http://blog.csdn.net/tsj19881202/article/details/7517232 遇到某需求,要求维护sm30的视图时,能加上排序按钮. 基本参考: http:// ...

  10. BAPI 使用

    BAPI_ACC_DOCUMENT_POST *---BAPI_ACC_DOCUMENT_POST 所需要的参数  DATA: OBJ_TYPE LIKE BAPIACHE09-OBJ_TYPE,   ...