最爱白菜

不登高山,不知天之高也;不临深溪,不知地之厚也。(《荀子》) ◆◆最爱白菜◆◆

用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
qunluo的公告
最近状态:认认真真做事,踏踏实实做人!</br> <script src="http://www.lsren.com/count/counter.asp?name=qunluo&dir=2"></script> <!--这个计数器申请地址http://www.lsren.com/count/adminlogin.asp,name和PASSword均是qunluo呵,谁看见了不要乱改我的东西,谢谢啦!~^)^~--> <br> 【个人简介】:<br> 网名:最爱白菜/鸽子/海底捞月<br> <a href='mailto:qun-luo#163.com'>loadingthink#hotmail.com</a><br> 来自:云南昆明 <hr></br> 【这里的文章部分来自于网上收藏,纯属个人学习爱好行为,别无它意,如果你觉得侵犯了你的版权,我可以尽快更改过来】
文章分类
BLOG邻居
"小灰"的专栏
Another's story
CN-Bruce's Blog
griefforyou的程序人生
limodou学习记录 (Python)
LW549 的BLOG
分享Java快乐
沁竹的BLOG
深空的 PHP/Java 人生
编程手札
装配中的脑袋
轻灵自由的珍珠
阿好空间
阿赖.COM @CSDN BLOG
创业杂谈
管理资讯
阿里巴巴以商会友
阿里巴巴创业社区
阿里巴巴创业论坛
名家收藏
【孟子E章】的专栏
-=NetBee=-的学习手记
ASP FAQ
ITPUB论坛
Kaneboy的Blog
Powerful ASP Components
study-area
уαуυ's НОМБ
中国E书网 (强荐)
中国XML论坛
中国标准XML
中国龙
代码中国
侯捷网站
冰云@Blogging
蓝蚂蚁工作室
迷失网络
透明思考
特别收藏
文件名信息数据库
网上生活
.NET 247 (类/命名索引)
※Office中国※
Ari--孤独的狙击手
CSDN.NET 技术中心
dll文件大全
Eclipse - 赛迪网
Flier's Sky
http://www.findlaw.cn/
http://www.iteer.net/
IT之源
Microsoft .Net 框架 SDK 快速入门
MSDN 中文网站
Oracle 中国技术网
ORACLE中国用户讨论组
Oracle技术网
O'Reilly's CD bookshelf
Python 编 程 论坛
Python中文社区
Regular Expression Library
UMLChina
vvsoft.COM 中文FTP
W3Schools Online Web Tutorials
web 开发技术荟萃
中国DotNet俱乐部
中国标准XML
中国系统分析员
中国经理人网
中文Zope用户组
亚商文档网
亚太国际管理训练中心
微软中文新闻组列表
微软亚洲技术社区
微软技术
微软高级培训论坛
找法律网(FindLaw.cn)
无忧脚本
法规检索
破釜沉舟
软件工程专家网
存档

原创  子窗口和父窗口的函数或对象能否相互访问 (转载) 收藏

子窗口和父窗口的函数或对象能否相互访问
解决思路
       每一个窗口其实也是一个对象,窗口内的对象或函数就相当于对象内的对象或方法,问题的关键是如何取得窗口对象的控制句柄,不同的窗口的控件句柄是不一样的,下面分三种窗口讨论。
具体步骤
1.用window.open()打开的一般窗口。

<script>
var sub
function sub_win(){
sub=window.open()    //sub为子窗口句柄
//以数据流方式向子窗口输出HTML代码 ,sub_function()为子窗口的演示函数
sub.document.write("<script>function sub_function(){alert(’子窗口函数’)}<\/script><button onClick=’opener.par_function()’>调用父窗口函数</button>")        
sub.document.close() //关闭子窗口的输出流
}
function par_function(){//父窗口的演示函数
alert("父窗口函数")
}
</script>
<button onClick="sub_win()">打开子窗口</button><button onClick="sub.sub_function()">调用子窗口内函数</button>

代码运行效果如图1.5.6所示。

图1.5.6 在父窗口访问子窗口的函数

从上面的代码中可以发现,父窗口调用子窗口的函数或对象,需要在对象前加上子窗口句柄(上例中的变量sub)作前缀,要访问子窗口中的sub_function()函数,就是sub.sub_function(),反过来,在子窗口中访问父窗口的函数或对象,需要在前面加上opener,如opener.par_function()。
 提示:这里只是为了演示方便,以数据流方式向子窗口中输出HTML代码,在实际应用时直接在弹出页中按上面所说的方法调用就行了。

2.用showModalDialog打开的模式窗口。

<script>
function smdWin(){
win=window.showModelessDialog("demo.htm",window,"dialogWidth=200px;dialogHeight=200px;status=0;scroll=no")
}
</script>
<button onclick="smdWin()">打开模式窗口</button>
<input id="oInput">

demo.htm:

<input id="sInput">
<button onClick="dialogArguments.oInput.value=sInput.value">传递文字</button>

代码运行效果如图1.5.7所示。

图1.5.7 在子窗口访问父窗口的对象

注意:在模式对话框的父窗口中无法通过鼠标操作控制访问模式对话框的对象,但可以通过设置自动执行的脚本来实现访问,方法同无模式对话框。

3.用showModelessDialog方法打开的无模式窗口

 <script>
var win
function smdWin(){
win=window.showModelessDialog("demo.htm",window,"dialogWidth=200px;dialogHeight=200px;status=0;scroll=no")
}
</script>
<button onclick="smdWin()">打开无模式窗口</button>
<input id="oInput">
<button onClick="win.sInput.value=oInput.value">传递文字</button>

demo.htm:

<input id="sInput">
<button onClick="dialogArguments.oInput.value=sInput.value">传递文字</button>

代码运行效果:

图1.5.8 在父窗口中访问子窗口的对象

图1.5.9 在子窗口中访问父窗口的对象

可以看出,父窗口和子窗口的数据传递基本方法是一样,只是模式窗口和无模式窗口在向父窗口传递数据时把一般窗口的opener换成了dialogArguments
注意:打开模式窗口或无模式窗口的第二个参数须为window,模式窗口的父窗口无法以常规方式即时向它传递数据,因为它的父窗口无法获得焦点。
技巧:父窗口要给子窗口传递数据,还可以通过给页地址后添加参数,然后在子窗口用location.search取值的方式来完成,还可以通过打开子窗口的第二个参数来完成,如:

<script>
var sub
function sub_win(){
sub=window.open("","demo","width=100,height=100")
sub.document.write("<script>alert(window.name)<\/script>")  
sub.document.close()
}
</script>
<button onClick="sub_win()">打开子窗口</button>

图1.5.10 通过open方法的第二个参数传递数据
特别提示
对于第一种情况,代码运行后,先单击【打开子窗口】按钮,然后再单击【调用子窗口内函数】和【调用父窗口函数】按钮看效果;第二、三种情况的代码运行后在模式/无模式窗口的文本框中填写内容后再单击【传递文字】按钮。

特别说明


通过本例的学习,读者朋友应该掌握父窗口与子窗口的相互访问方法,还有对象的概念。

引用地址:http://www2.flash8.net/teach/4139.htm

发表于 @ 2005年11月21日 12:07:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:常见文件扩展名和它们的说明 | 新一篇:Javascript 中 ShowModalDialog 的使用方法

  • 发表评论
  • 评论内容:
  •  
Copyright © qunluo
Powered by CSDN Blog