首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用javascript showModalDialog将值从父窗体传递到子窗体

使用javascript showModalDialog将值从父窗体传递到子窗体
EN

Stack Overflow用户
提问于 2009-09-29 02:28:51
回答 3查看 26.5K关注 0票数 4

如果我想传入确认框的值!假设我想删除第一项,所以当我按下delete按钮时,我选中了复选框。弹出框中包含第一个详细信息项。

我已经使用show modal对话框(JavaScript)实现了弹出窗口,但我仍然无法将父值放入子窗体中!

此外,如果我选中了项目1和项目2,我希望这两项都显示在确认框中!!

如有任何建议,我们将非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-29 02:40:59

showModalDialog的中间参数可以是对象、数组或任何您喜欢的对象,通过引用window.dialogArguments,可以在子窗体中(例如,在其OnLoad事件中)检索此传递的对象。

稍等片刻,我将包含一个代码样本(我上次这样做已经有10年了)。

更新:下面是一个非常简单的代码示例,它展示了使用showModalDialog在父窗口和子窗口之间来回传递数据的基础知识。在同一个文件夹中创建两个HTML文件,分别命名为"Parent.htm“和"Child.htm”。将此代码放入Parent.htm

代码语言:javascript
复制
<HTML>
<input type=button value="CustomConfirm" 
    onclick="ShowMyDialog()">
<script language="javascript">
function ShowMyDialog()
{
    var obj = new Object(); 
    obj.data1 = 'some data 1';
    obj.data2 = 'some data 2';
    showModalDialog('Child.htm', obj, '');
    alert(obj.returnvalue);
}
</script>
</HTML>

并将此代码放入Child.htm

代码语言:javascript
复制
<HTML>
<body onload="ReadPassedData()" 
    onunload="DoUnload()">
<input type=text id="textbox1">
<br>
<input type=text id="textbox2">
<br>
<br>
Return value:<br>
<input type=text id="textbox3" 
    value="type something">
</body>
<script language="javascript">
function ReadPassedData()
{
    var obj = window.dialogArguments;
    var tb1 = document.getElementById('textbox1');
    tb1.value = obj.data1; 
    var tb2 = document.getElementById('textbox2');
    tb2.value = obj.data2; 
}
function DoUnload()
{
    var obj = window.dialogArguments;
    obj.returnvalue = textbox3.value;
}
</script>
</HTML>

然后在浏览器中打开Parent.htm并单击"CustomConfirm“按钮。子窗口将显示在父窗口中设置的值("some data 1“和"some data 2"),当子窗口关闭时,您在第三个文本框中输入的任何内容都将显示在一个从父窗口调用的警告框中。这显示了将数据传递给子对象并从中获取数据的基本方式。

还有一种从子窗口返回对象(成为从showModalDialog调用本身返回的值)的方法,但我不记得是怎么做的。

更新2:要传递一个数组,您可以这样做:

代码语言:javascript
复制
var myarray = new Array();
myarray[0] = "Bob Smith";
myarray[1] = "Doug Jones";
myarray[2] = "Englebert Humperdinck";
var ret = showModalDialog('Child.htm', myarray, '');
alert(ret); // this will display whatever the child set for its
    // window.returnValue

然后在子窗口中,您将像以前一样获得数组,并使用它来构建详细信息显示:

代码语言:javascript
复制
var myarray = window.dialogArguments;
alert(myarray[0]); // or whatever

由于现在传入的是数组而不是对象,因此需要返回true或false (而不是向传递的对象添加return属性)。可以通过设置window.returnValue属性来设置子级中的返回值。由于您正在创建一个确认弹出窗口,因此您可能会有一个“是”和一个“取消”按钮,这两个按钮将分别将window.returnValue设置为truefalse

票数 1
EN

Stack Overflow用户

发布于 2009-09-29 02:41:00

如果您使用的是弹出窗口,则可以按如下方式引用父窗口:

代码语言:javascript
复制
window.opener.document.getElementById("whatever").value = whatever;
票数 1
EN

Stack Overflow用户

发布于 2014-06-06 17:14:19

假设我们有一个WindowTrigger.aspx,它包含一个按钮,如下所示,它调用以下脚本并执行,并使用showModalDialog打开新页面WindowContainer.aspx。

代码语言:javascript
复制
     <asp:Button ID="btnDate" Text="Display Window" OnClientClick="WindowOpen()"       runat="server" />

<script language="javascript" type="text/javascript">
         function WindowOpen() {
             var theAdmin = new Array();
             theAdmin["id"] = '';
             theAdmin["name"] = '';
             var winopts = "dialogWidth:290px;dialogHeight:220px;scroll:no;resizable:no;status:no;unadorned:yes";

             var admStatus = window.showModalDialog("http://localhost:51836/WindowContainer.aspx", theAdmin, winopts);
             alert(theAdmin["id"]);
             alert(theAdmin["name"]);
         }
     </script> 

上面的脚本包含数组声明'theAdmin‘,它使用第二个参数传递给子窗口,如下所示

下面的代码是用WindowContainer.aspx编写的,它包含一个列表框和一个按钮,单击按钮时,参数将被初始化为列表框中相应的选定文本和选定值。

代码语言:javascript
复制
    <asp:ListBox ID="ddlUsers" runat="server" Rows="10" SelectionMode="Multiple">
       <asp:ListItem Text="Chennai" Value="044"></asp:ListItem>
       <asp:ListItem Text="Hyderabad" Value="040"></asp:ListItem>
       </asp:ListBox> 
   <asp:Button ID="btnDate" Text="Date" OnClientClick="submitForm()"  runat="server" />  

<script language="javascript" type="text/javascript">
         function submitForm() {
             var lstAdmins = document.getElementById('ddlUsers');
             var SelectedIDs = "";
             var SelectedNames = "";
                 if (lstAdmins != null) {
                     for (i = 0; i < lstAdmins.options.length; i++) {
                         if (lstAdmins.options[i].selected) {
                             if (SelectedIDs == '')
                                 SelectedIDs = lstAdmins.options[i].value;
                             else
                                 SelectedIDs += ";" + lstAdmins.options[i].value;

                             if (SelectedNames == '')
                                 SelectedNames = lstAdmins.options[i].text;
                             else
                                 SelectedNames += ";" + lstAdmins.options[i].text;
                         }
                     }
                 }
             var theAdmin = dialogArguments;
             theAdmin["id"] = SelectedIDs;
             theAdmin["name"] = SelectedNames;
             window.returnValue = "OK";
             self.close();
         }

     </script> 

现在输出将是"044;040;“和"Chennai;Hyderabad;”,这样我们就可以将值(这里是theAdmin)从父窗体传递到子窗体,并且结果也可以在父窗体中使用(不会丢失参数的作用域)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1490294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档