首页 > 代码库 > JavaScript用window.opener实现父窗口和子窗口传值
JavaScript用window.opener实现父窗口和子窗口传值
在实际项目中经常会有这样的需求,点击某个按钮弹出对话框,对话框中可以编辑和修改相应的内容,然后再保存并关闭窗口,如果写一个静态的div作为显示隐藏,倒也可以,但是还得调整样式,麻烦点。现在用window.open就可以实现同样的效果,父页面和子页面照样传值。
demo代码如下:
父页面:
html部分:
<!-- Author : 赵一鸣 Blog : http://www.zymseo.com Time : 2016/9/20--><!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <title>父页面</title> <meta name="Keywords" content=""> <meta name="Description" content=""> <style type="text/css"> .clear{ position:fixed; background:rgba(0,0,0,0.2); top:0px; right:0px; bottom:0px; left:0px; display:none; } </style> </head> <body> <input type="text" id="parentInpt" /> <input type="button" value="编辑" id="edit" /> <!--遮罩层--> <div class="clear"></div> </body></html>
javascript部分:
<script type="text/javascript"> var parentPage = { oEdit : document.getElementById(‘edit‘), oParentInpt : document.getElementById(‘parentInpt‘), oClear : document.getElementsByClassName(‘clear‘)[0], //初始化方法 init : function(){ //点击编辑按钮 this.oEdit.onclick = this.editFunction; }, //打开子页面,初始化子页面的宽高及位置 editFunction : function(){ var This = parentPage; var oParentInptVal = This.oParentInpt.value; This.oClear.style.display = ‘block‘; window.open(‘son.html‘,window,‘height=500px,width=500px,left=500px,top=0px‘); } }; parentPage.init();</script>
子页面:
html部分:
<!-- Author : 赵一鸣 Blog : http://www.zymseo.com Time : 2016/9/20--><!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <title>子页面</title> <meta name="Keywords" content=""> <meta name="Description" content=""> </head> <body> <input type="text" id="sonInpt" /> <input type="button" value="保存" id="save"> </body></html>
javascript部分:
<script type="text/javascript"> var sonPage = { oSonInpt : document.getElementById(‘sonInpt‘), oParentInpt : window.opener.document.getElementById(‘parentInpt‘), oSave : document.getElementById(‘save‘), //初始化方法 init : function(){ //子页面自动获取父页面的input值 this.oSonInpt.value = http://www.mamicode.com/this.oParentInpt.value; //点击保存按钮 this.oSave.onclick = this.saveFunction; //监听用户是否点击了子页面的关闭窗口按钮,如果是,就传值 window.onbeforeunload = sonPage.sonToParent; }, //保存 saveFunction : function(){ sonPage.sonToParent(); window.close(); }, //子页面给父页面传值,执行: sonToParent : function(){ var This = sonPage; var oSonInptVal = This.oSonInpt.value; This.oParentInpt.value = oSonInptVal; window.opener.document.getElementsByClassName(‘clear‘)[0].style.display = ‘none‘; } }; sonPage.init();</script>
另外,你也可以用iframe实现同样的技术:我博客的WEB前端开发案例库中有一篇文章:《解决原生js或jQuery 实现父窗口的问题,如window.parent.document.getElementById》。
通过window对象的open()方法,open()方法将会产生一个新的window窗口对象。其用法为:
window.open(URL,windowName,parameters);
URL: 描述要打开的窗口的URL地址,如何为空则不打开任何网页;
windowName:描述被打开的窗口的民称,可以使用‘_top‘、‘_blank‘等内建名称,这里的名称跟<a href="http://www.mamicode.com/..." target="...">里的target属性是一样的。
parameters:描述被打开的窗口的参数值,或者说是样貌,其包括窗口的各个属性值,及要传入的参数值。
参数说明如下:
top=# 窗口顶部离开屏幕顶部的像素数;
left=# 窗口左端离开屏幕左端的像素数;
width=# 窗口的宽度;
height=# 窗口的高度;
menubar=... 窗口有没有菜单,取值yes或no;
toolbar=... 窗口有没有工具条,取值yes或no;
location=... 窗口有没有地址栏,取值yes或no;
directories=... 窗口有没有连接区,取值yes或no;
scrollbars=... 窗口有没有滚动条,取值yes或no;
status=... 窗口有没有状态栏,取值yes或no;
resizable=... 窗口给不给调整大小,取值yes或no;
JavaScript用window.opener实现父窗口和子窗口传值