`
yxgyh
  • 浏览: 275727 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

子窗口中操作父窗口对像

阅读更多
在ModalDialog中操作父窗口对象

1、不能使用window.parent

Window.parent是用来在frame中进行操作的,在对话框中不能用来操作父窗口对象

 

2、正确的做法

 

调用modaldialog时通过传参数的方式操作

例:

需求

父窗口页面为a.html 子窗口页面为b.htmla.html中有文本框idtest1,在打开的对话框中点击按钮,将a.html的文本框值改为“子窗口值”。

实现

打开对话框时把test1作为参数传给子窗口,在子窗口中获取参数,将参数对象(即a.html中传过来的text对象)的value属性值设置为“子窗口值”

注意:这里只能传id,不能传name

 

a.html代码如下

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>a.html</title>

</head>

<body>

<input type=text id=test1 value=''>

<input type=button value=" OK " onclick='window.showModalDialog("b.html", test1)'>

</body>

</html>

 

b.html代码如下

 

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>b.html</title>

<script language=javascript>

function func1(){

//获取父窗口传过来的参数

var ptextid = window.dialogArguments;

if(ptextid != undefined){

//将父窗口传过来的对象的值改为“子窗口值”

ptextid.value = "子窗口值";

//关闭子窗口

window.close();

}

}

</script>

</head>

<body>

<input type=button value=" OK " onclick=func1()>

</body>

</html>

 

 

如果需要操作的父窗口对象比较多,也可以将window或window.document作为参数传给子窗口。

例:

需求

a.html中添加id为“aform”的的formform中有idtest2的文本框,在b.html中,除了进行上面的操作之外,还要将test2的值改为“子窗口值2”,并将form提交到c.html

实现1

a.html中打开对话框的函数改为如下方式:

window.showModalDialog("b.html", window.document);

 

b.htmlfunc1()改为如下:

 

function func1(){

var pdoc = window.dialogArguments;

if(pdoc!=undefined){

pdoc.all.test1.value="子窗口值";

pdoc.all.test2.value="子窗口值2";

pdoc.all.aform.action="c.html";

pdoc.all.aform.submit();

}

}

 

 

实现2

因为在子窗口中对父窗口进行的操作比较多,也可以采用execScript的方式实现。

 

a.html中打开对话框的函数改为如下方式:

window.showModalDialog("b.html", window);

 

添加javascript函数如下

function func(){

test1.value="子窗口值";

document.all.test2.value="子窗口值2";

aform.action="c.html";

aform.submit();

}

 

b.htmlfunc1()改为如下:

 

function func1(){

var pwin = window.dialogArguments;

if(pwin!=undefined){

var codeStr = "func();"

pwin.execScript(codeStr,"javascript");

window.close();

}

}


showModalDialog和showModelessDialog使用心得-转载
一、showModalDialog和showModelessDialog有什么不同?
  showModalDialog:被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。
  showModelessDialog:被打开后,用户可以随机切换输入焦点。对主窗口没有任何影响(最多是被挡住一下而以。:P)

二、怎样才让在showModalDialog和showModelessDialog的超连接不弹出新窗口?
  在被打开的网页里加上<base target="_self">就可以了。这句话一般是放在<html>和<body>之间的。

三、怎样才刷新showModalDialog和showModelessDialog里的内容?
  在showModalDialog和showModelessDialog里是不能按F5刷新的,又不能弹出菜单。这个只能依靠javascript了,以下是相关代码:

<body onkeydown="if (event.keyCode==116){reload.click()}">
<a id="reload" href="filename.htm" style="display:none">reload...</a>

  将filename.htm替换成网页的名字然后将它放到你打开的网页里,按F5就可以刷新了,注意,这个要配合<base target="_self">使用,不然你按下F5会弹出新窗口的。

四、如何用javascript关掉showModalDialog(或showModelessDialog)打开的窗口。
  <input type="button" value="关闭" onclick="window.close()">
  也要配合<base target="_self">,不然会打开一个新的IE窗口,然后再关掉的。

五、showModalDialog和showModelessDialog数据传递技巧。
  (作者语:本来想用一问一答形式来写的,但是我想不出这个怎么问,所以只好这样了。)
  这个东西比较麻烦,我改了好几次了不是没办法说明白(语文水平越来越差了),只好用个例子说明了。
  例子:
    现在需要在一个showModalDialog(或showModelessDialog)里读取或设置一个变量var_name

      一般的传递方式:
        window.showModalDialog("filename.htm",var_name)
        //传递var_name变量
      在showModalDialog(或showModelessDialog)读取和设置时:
        alert(window.dialogArguments)//读取var_name变量
        window.dialogArguments="oyiboy"//设置var_name变量
    这种方式是可以满足的,但是当你想在操作var_name同时再操作第二个变理var_id时呢?就无法再进行操作了。这就是这种传递方式的局限性。
    
      以下是我建议使用的传递方式:
        window.showModalDialog("filename.htm",window)
        //不管要操作什么变量,只直传递主窗口的window对象
      在showModalDialog(或showModelessDialog)读取和设置时:
        alert(window.dialogArguments.var_name)//读取var_name变量
        window.dialogArguments.var_name="oyiboy"//设置var_name变量

        同时我也可以操作var_id变量
        alert(window.dialogArguments.var_id)//读取var_id变量
        window.dialogArguments.var_id="001"//设置var_id变量

        同样还可以对主窗口的任何对象进行操作,如form对象里的元素。
        window.dialogArguments.form1.index1.value="这是在设置index1元素的值"

六、多个showModelessDialog的相互操作。
  因为光说很费劲,我就偷点懒,直接用代码来说了,如果不明白的话那就直接来信(oyiboy#163.net(使用时请将#改成@))问我吧。

  以下代码的主要作用是在一个showModelessDialog里移动别一个showModelessDialog的位置。

  主文件的部份js代码。
  var s1=showModelessDialog('控制.htm',window,"dialogTop:1px;dialogLeft:1px") //打开控制窗口
  var s2=showModelessDialog('about:blank',window,"dialogTop:200px;dialogLeft:300px")  //打开被控制窗口

  控制.htm的部份代码。
  <script>
    //操作位置数据,因为窗口的位置数据是"xxxpx"方式的,所以需要这样的一个特殊操作函数。
function countNumber(A_strNumber,A_strWhatdo)
{
A_strNumber=A_strNumber.replace('px','')
A_strNumber-=0
switch(A_strWhatdo)
{
case "-":A_strNumber-=10;break;
case "+":A_strNumber+=10;break;
}
return A_strNumber + "px"
}
  </script>
  <input type="button" onclick="window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,'-')" value="上移">
  <input type="button" onclick="window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,'-')" value="左移">
  <input type="button" onclick="window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,'+')" value="右移">
  <input type="button" onclick="window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,'+')" value="下移">

  以上关键部份是:
    窗口命名方式:var s1=showModelessDialog('控制.htm',window,"dialogTop:1px;dialogLeft:1px")
    变量访问方式:window.dialogArguments.s2.dialogTop

  这个例子只是现实showModelessDialog与showModelessDialog之间的位置操作功能,通过这个原理,在showModelessDialog之间相互控制各自的显示页面,传递变量和数据等。这要看各位的发挥了。

评论

相关推荐

    C#中父窗口和子窗口之间实现控件互操作

    总的来说,C#中父窗口和子窗口之间的控件互操作主要依赖于对象实例的引用、事件机制、属性访问以及回调方法。理解并熟练运用这些技术,可以创建出灵活且功能丰富的多窗口应用程序。在实际开发中,还要注意线程同步...

    Qt 子窗口父窗口切换,窗口间传值

    在Qt编程中,子窗口与父窗口之间的交互是常见的需求,包括窗口间的切换和数据传递。这涉及到Qt的窗口系统和信号与槽机制。本文将深入探讨如何在Qt环境中实现子窗口与父窗口的切换以及如何在窗口之间传递数据。 首先...

    子窗口传值到父窗口.rar

    这通常发生在弹出窗口或者框架集等场景中,用户在子窗口进行操作后,需要将结果反馈给父窗口,以便更新父窗口的状态或展示相关信息。这个过程就称为“子窗口传值到父窗口”。在JavaScript中,我们可以利用多种方法...

    子窗口刷新父窗口总结

    ### 子窗口刷新父窗口技术总结 在网页开发中,我们常常遇到需要在子窗口完成某些操作后,刷新或更新父窗口...通过适当的编程策略,可以有效地在子窗口操作完毕后,触发父窗口的刷新,提升用户体验和程序功能的连贯性。

    子窗口通过js操作父窗口中的元素

    在网页开发中,有时我们需要...通过以上介绍,你应该能够理解并实现子窗口通过JS操作父窗口中的元素。在实际开发中,结合HTML和DOM的知识,可以创建出丰富多样的交互效果。不断学习和实践,你的Web开发技能将更加熟练。

    MFC子窗口和父窗口

    在 MFC 的 CWnd 类中,所有者窗口保存在 m_hWndOwner 成员变量中,父窗口则保存在 m_hParent 中,但是这两个值并不一定和窗口对象数据结构中的值相对应。 窗口之间的关系,决定了窗口的外在表现。比如显示、销毁等...

    Qt--子窗口向父窗口传值

    本主题将详细探讨如何在Qt中实现从子窗口(子对话框)向父窗口传递数据,具体涉及的主要文件包括`mainwindow.cpp`、`main.cpp`、`myform.cpp`、`logindlg.cpp`、`mainwindow.h`、`myform.h`、`logindlg.h`以及UI文件...

    Qt6:子窗口向父窗口传值(多控件版)

    子窗口向父窗口传递数据是常见的操作,例如用户在子窗口中填写表单后,点击确认按钮,将表单数据传回父窗口进行进一步处理。本文将详细介绍如何实现这一功能。 首先,我们需要了解Qt中的信号和槽机制。这是Qt进行...

    javascript经典特效---子窗口对父窗口的操作.rar

    `window.opener`提供了对创建当前窗口的窗口的引用,允许我们在子窗口中操作父窗口的元素或者调用父窗口的函数。 子窗口对父窗口的操作主要包括以下几种: 1. 改变父窗口的URL:在子窗口中,我们可以使用`window....

    HTML中IFrame父窗口与子窗口相互操作

    2. **子窗口操作父窗口的大小**: - **最大化**:通过设置窗口的位置和大小,例如`win.moveTo(-4,-4);win.resizeTo(screen.availWidth+8,screen.availHeight+8);`。 - **最小化**:将窗口大小设置为0,例如`win....

    模式窗口操作父窗口

    在探讨“模式窗口操作父窗口”这一主题时,我们首先需要理解模式窗口(Modal Window)的概念及其在用户界面设计中的作用。模式窗口是一种常见的UI组件,用于在当前应用的主窗口上显示一个对话框或子窗口,这个子窗口...

    c#利用委托来实现关闭子窗口通知父窗口执行方法

    ### C#中利用委托实现子窗口关闭时通知父窗口执行特定方法 在C#中,事件和委托是非常重要的概念,特别是在处理用户界面交互时。本文将详细介绍如何利用委托(Delegate)来实现在关闭子窗口时通知父窗口执行特定的...

    JavaScript操作iframe父窗口和子窗口例子

    - 子窗口中的JavaScript可以使用`parent`或`top`关键字来引用父窗口的对象和方法。 - 例如,调用父窗口的函数:`parent.myFunction()`;获取父窗口的变量:`var parentVar = parent.myVar`。 5. **跨窗口通信**:...

    父窗口与子窗口间的调用

    父窗口可以直接通过返回的窗口对象来修改子窗口的内容或调用其方法。 示例代码: ```javascript function openChildAndSendData() { var win = window.open("about:blank", "childWindow", "width=200,height=200...

    jsp与javascript配合,父窗口与子窗口之间刷新

    例如,用户在子窗口中操作后,通过Ajax向服务器提交数据,服务器响应后,子窗口将更新结果告知父窗口,父窗口根据情况决定是否刷新显示新的数据。这个过程体现了Web开发中的前后端分离原则,以及提升用户体验的现代...

    父窗口调用iframe子窗口方法

    在Web开发中,"父窗口调用iframe子窗口方法"是一个常见的交互场景,尤其是在构建复杂的单页面应用或者需要跨窗口通信时。这篇文章将详细讲解如何实现这个功能,并提供相关的源码示例。 首先,理解基本概念。`iframe...

    刷新父窗口的多种方法

    在Web开发中,经常会出现需要从子窗口或弹出窗口刷新父窗口的情况。这通常发生在使用JavaScript进行页面交互时。本文将详细介绍四种不同的方法来实现这一目标。 #### 1. 弹出子页面刷新父窗口 在打开一个新的窗口...

    JS子窗口调用父窗口

    在JavaScript中,有时我们需要从一个子窗口(通常是通过`window.open()`方法打开的新窗口)与父窗口(即打开该新窗口的原始窗口)之间进行交互。这种交互可能包括调用父窗口中的函数或修改父窗口中元素的状态等。...

    js中用open方式打开新窗口向父窗口传值

    首先,在父窗口中,我们使用`window.open()`方法打开一个新的子窗口,该方法将返回一个新的窗口对象,我们可以使用该对象来访问子窗口中的元素。例如,我们可以使用`window.opener`属性来访问父窗口中的元素。 在子...

    易语言真正设置父窗口

    3. `SetParent`: 这是设置父窗口的核心函数,它接受子窗口的句柄和新父窗口的句柄作为参数,将子窗口的父窗口设置为新窗口。 4. `SetWindowLong` 和 `GetWindowLong`: 这两个函数用于获取和设置窗口的额外长整型数据...

Global site tag (gtag.js) - Google Analytics