JavaScript 子窗体与父窗体相互传值的三种实现方式

作者:异步漫步时间:2026-10-24 22:57:08浏览:329

本文详细讲解 JavaScript 中子窗体与父窗体相互传值的三种核心方法。涵盖通过 window.open 打开普通窗口并利用 opener 对象修改父页面数据;利用 window.showModalDialog 模式窗口通过 dialogArguments 传递参数及 returnValue 返回结果;以及通过子窗口直接调用父窗口定义的全局函数来实现数据回传。包含完整代码示例与关键参数说明。

JavaScript 子窗体与父窗体相互传值的三种实现方式

本文整理了一套精简实用的代码版本,适用于大多数内容管理系统(CMS)中常见的功能场景,例如 Dedecms 中选择相关文章的功能即采用此类机制。以下提供具体的实现代码。


通过 window.open 打开普通窗口传值

父页面核心代码实现如下:


具体代码片段如下:

<script>
function SelectArcListA(fname){
var posLeft = 10;
var posTop = 10;
window.open("content_select_list.asp?f="+fname+"&k="+form1.keyword.value, "selArcList", "scrollbars=yes,resizable=yes,statebar=no,width=700,height=500,left="+posLeft+", top="+posTop);
}
</script>
<input name="lsel" type="button" id="lsel" class="nbt" style="width:150px" onChange="" value="从已发布文档中选取..." onClick="SelectArcListA('form1.xiangguanid');">

子页面核心代码实现如下:


具体代码片段如下:

<SCRIPT language=javascript>
//获得选中文件的文件名
function getCheckboxItem()
{ 
var allSel="";
if(document.form2.arcID.value) return document.form2.arcID.value;
for(i=0;i<document.form2.arcID.length;i++)
{ 
if(document.form2.arcID[i].checked)
{ 
if(allSel=="")
allSel = document.form2.arcID[i].value;
else
allSel = allSel+","+document.form2.arcID[i].value;
} 
} 
return allSel;
} 
function selAll()
{ 
for(i=0;i<document.form2.arcID.length;i++)
{ 
if(!document.form2.arcID[i].checked)
{ 
document.form2.arcID[i].checked=true;
} 
} 
} 
function noSelAll()
{ 
for(i=0;i<document.form2.arcID.length;i++)
{ 
if(document.form2.arcID[i].checked)
{ 
document.form2.arcID[i].checked=false;
} 
} 
} 
function ReturnValue()
{ 
if(window.opener.document.form1.xiangguanid.value==""){
window.opener.document.form1.xiangguanid.value = getCheckboxItem();
} 
else{
window.opener.document.form1.xiangguanid.value += ","+getCheckboxItem();
} 
alert("成功增加你选中的ID,你可以继续增加");
//window.opener=true;
//window.close();
}

下面是html代码,页面中需要<input type="checkbox" name="arcID" value="<%=rs("id")%>">输出选择的id


具体代码片段如下:

<A class=inputbutx
href="javascript:selAll()">全选</A> &nbsp; <A class=inputbutx
href="javascript:noSelAll()">取消</A> &nbsp; <A class=inputbutx
href="javascript:ReturnValue()">把选定值加到列表</A>

利用 showModalDialog 模式窗口传值

以下补充模式窗口传值的实现方式:


//模式窗体传值



<!-- ====== 父窗体,我取名为parentform.html ==== -->


具体代码片段如下:

 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>弹出窗口内录入数据确定后返回给父窗体--主窗体</title>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="jb 51.net">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript" type="text/javascript">
function doInput()
{ 
var win = window.showModalDialog("Childform.html",window,"dialogWidth=500px;dialogHeight=300px;center=yes;status=no");
if(win != null)
{ 
document.getElementById("parentTextBox").value = win;
} 
} 
</script>
</head>
<body>在新弹出的窗体里输入数据,传输到父窗体.
<br/>
<br/>
<br/>
&nbsp;&nbsp;<input type="text" id="parentTextBox" /> <a href="javascript:doInput()">点这里弹出子窗体</a>
</BODY>
</HTML>

<!-- ============= 父窗体代码结束 ============= -->



<!-- ======= 子窗体:取名为childform.html ======= -->


具体代码片段如下:

 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title> 弹出窗口内录入数据确定后返回给父窗体--子窗体</title>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="qiujy">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<base target="_self">
</head>
<body topmargin="0" leftmargin="0" scroll="no">
</br>
&nbsp;&nbsp;<input type="text" id="childTextBox"/>
</br></br>
&nbsp;&nbsp;<a href="javascript:doPassToParent()">点这里返回</a>
</BODY>
</HTML>
<script language="javascript" type="text/javascript">
document.getElementById("childTextBox").value = window.dialogArguments.document.getElementById("parentTextBox").value;
function doPassToParent()
{ 
if(document.getElementById("childTextBox").value.length <=0)
{ 
alert("请填写数据");
return;
} 
window.returnValue = document.getElementById("childTextBox").value;
window.close();
} 
</script>

通过 opener 直接调用父窗口函数传值

//子窗体和父窗体传值



1.新建两个页面 一个是 Parent.html


具体代码片段如下:

 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>父窗体</title>
<script language="javascript" type="text/javascript">
function OpenWindow(){
window.open('son.html');
} 
function setValue(m_strValue){
document.getElementById("txt_Value").value = m_strValue;
} 
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<label>
<input type="text" name="txt_Value" id="txt_Value" />
</label>
<label>
<input type="button" name="btn_ShowClose" id="btn_ShowClose" value="按钮" onclick="OpenWindow();" />
</label>
</form>
</body>
</html>

另一个是子窗体 :


具体代码片段如下:

 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>子窗体</title>
<script language="javascript" type="text/javascript" >
function CloseWind(){
opener.setValue("传值到父窗体");
window.close();
} 
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<label>关闭
<input type="button" name="btn_Close" id="btn_Close" value="按钮" onclick="CloseWind();"
/> 
</label>
</form>
</body>
</html>

2.通过子窗体执行的父窗体的setValue(m_strValue)来执行赋值操作.


作者最新文章