通常使用window.open的方式开启新窗口的话,要取得父窗口的控件,可以用window.opener来取得父窗口。然而如果使用showModalDialog的话...却无效。
如果有需要的话,需要修改开启的语法以及showModalDialog中的语法开启语法第2个参数请下self,范例如下var rc=window.showModalDialog(strURL,self,sFeatures);,然后接着就是呼叫父窗口的语法 var pWindow=window.dialogArguments; 这样就可以取得父窗口的window对象控制了。
例如:window.dialogArguments.document.getElementsByName("processId")[0].value;
js中 opener和parent的区别opener即谁打开我的,比如A页面利用window.open弹出了B页面窗口,那么A页面所在窗口就是B页面的opener,在B页面通过opener对象可以访问A页面。parent表示父窗口,比如一个A页面利用iframe或frame调用B页面,那么A页面所在窗口就是B页面的parent。在JS中,window.opener只是对弹出窗口的母窗口的一个引用。
farther.html
---------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript">
<!--
function doSearch(){
var s = new Object();
s.name ="aaa";
var k = window.showModalDialog("child.html",s,"dialogWidth:235px;status:no;dialogHeight:185px");
if(k.type=="")//传递回的type为空的时候才刷新页面。
{
alert("刷新");
location.reload();
}
}
//-->
</script>
</HEAD>
<BODY>
<input type ="button" value="openChild" οnclick="doSearch()">
</BODY>
</HTML>
--------------
child.html
--------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<SCRIPT LANGUAGE=javascript FOR=window EVENT=onload>
<!--
var s = new Object();//这里是关键若用户为单击按钮,已其它方式关闭按钮,则把type="" 传递回去。以免出现问题。且刷新父页面。
s.type="";
window.returnValue = s;
//-->
</SCRIPT>
</HEAD>
<BODY>
<input type ="button" value="返回不刷新" οnclick="doSearch()">
</BODY>
</HTML>
<script language=javascript>
<!--
var k=window.dialogArguments;
//使用传递过来的"aaa";
//..........
function doSearch()
{
var s = new Object();
s.type="OK";//设置返回值。//这里返回不刷新父页面。
window.returnValue=s;
window.close();
}
//-->
</script>
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
解决如下:
<head>
<base target = "_self">
</head>