[code]<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MainForm.aspx.cs" Inherits="Test.MainForm" %> <!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 runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <ul> <li> 父页面(文本失去焦点可看结果):<input id="txtParent" name="txtParent" type="text" value="parent" onblur="iframeTest()" /> </li> <li> <iframe src="FrameA.aspx" id="iframeA"></iframe> </li> <li> <iframe src="FrameB.aspx" id="iframeB"></iframe> </li> </ul> </div> <script type="text/[b]javascript[/b]"> function iframeTest() { } </script> </form> </body> </html>[/code]2、子页面A
[code]<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FrameA.aspx.cs" Inherits="Test.FrameA" %> <!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 runat="server"> <title></title> <script type="text/javascript"> //子页面与父页面之间的操作 function getParent() { } //当前子页面与另外一个子页面之间的操作 function getAnotherChild() { } </script> </head> <body> <form id="form1" runat="server"> <div> 子页面1(文本失去焦点可看结果):<input id="txtUserName" name="txtUserName" type="text" value="jeff wong" onblur="getParent()" /> </div> </form> </body> </html> [/code]3、子页面B
[code]<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FrameB.aspx.cs" Inherits="Test.FrameB" %> <!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 runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> 子页面2(文本失去焦点可看结果):<input id="txtUserNameB" name="txtUserNameB" type="text" value="jeffery zhao"/> </div> </form> </body> </html>[/code]二、操作 1、[b]父页面操作子页面 [/b]这个毫无疑问要在父页面MainForm.aspx文件里实现。我们修改父页面的javascript函数iframeTest,看父页面如何获取和操作子页面元素的:
[code] function iframeTest() { var frame1 = document.getElementById("iframeA"); var frame2 = document.getElementById("iframeB"); var frameA = document.frames["iframeA"]; //等价于 var frameAa = document.frames.iframeA; var frameB = document.frames["iframeB"]; //等价于 var frameBb = document.frames.iframeB; //********************************************** alert(frame1 == frameA); //false alert(frame2 == frameB); //false alert(frame1.src); //FrameA.aspx alert(frame1.location); //undefined alert(frameA.src); //undefined alert(frameA.location); //location alert(frameA.document.location); alert(frame1.document.body.innerHTML); //这里返回的是MainForm.aspx的body里的innerHTML alert(frame1.document.documentElement.innerHTML); //这里返回的是MainForm.aspx的html里的innerHTML alert(frameA.document.body.innerHTML); //这里返回的是FrameA.aspx的body里的innerHTML alert(frameA.document.documentElement.innerHTML); //这里返回的是FrameA.aspx的html里的innerHTML //********************************************** var childFrameDoc = undefined; //取FrameA.aspx内的input文本 if (document.all) {//IE childFrameDoc = frameA.document; //*** 如果是frame1,就取不到FrameA.aspx页面里的input *** } else {//Firefox childFrameDoc = frameA.contentDocument; } alert(childFrameDoc.body.innerHTML); var childTxt = childFrameDoc.getElementById("txtUserName"); var childTxtByName = childFrameDoc.getElementsByName("txtUserName"); alert(childTxt == childTxtByName[0]); //true alert(childTxt.value); //jeff wong alert(childTxtByName[0].value); // jeff wong //取FrameB.aspx内的input文本 childFrameDoc = undefined; if (document.all) {//IE childFrameDoc = frameB.document; } else {//Firefox childFrameDoc = frameB.contentDocument; } alert(childFrameDoc.body.innerHTML); var childTxt = childFrameDoc.getElementById("txtUserNameB"); var childTxtByName = childFrameDoc.getElementsByName("txtUserNameB"); alert(childTxt == childTxtByName[0]); //true alert(childTxt.value); //jeffery zhao alert(childTxtByName[0].value); // jeffery zhao }[/code]小结: a、通过iframe对象所在页面的对象模型(通过document.getElementById("iframeId")获取),你可以访问iframe对象的属性,但不能访问其内容。 b、frames集合提供了对iframe内容的访问(通过document.frames["iframeName"]获取)。通常情况下我们都使用frames集合读写iframe内包含的元素。 c、 如果只想改变iframe的src或者border, scrolling等attributes(与property不是一个概念,property是不能写在标签内的,比 如:scrollHeight,innerHTML等),就需要用到document.getElementById方法. d、要想使用iframe内的函数或dom元素(比如想得到iframe的document.body的内容),变量就必须通过frames集合.因为它取的是一个完整的DOM模型,而通过id获取的方法只是取出了一个object而已. e、如果在iframe的页面未完全装载的时候,调用iframe的dom模型,会发生错误. 2、[b]子页面操作父页面 [/b]这里以子页面FrameA.aspx举例。在子页面A中,我们通过函数getParent获取MainForm.aspx的dom元素,然后按照正常的dom元素操作就是了:
[code] //子页面与父页面之间的操作 function getParent() { if (self != top) { var oDoc = top.parent.document; alert(oDoc.body.innerHTML); alert(oDoc.documentElement.innerHTML); alert(oDoc.frames.length); //返回结果:2 表明父页面有两个iframe //操作父页面的文本框 var oTxt = oDoc.getElementById("txtParent"); alert(oTxt.value); } else alert("不在框架中"); }[/code]3、[b]子页面操作子页面[/b] 这个还要借助主页面间接获取另一个子页面。这里还以子页面A来举例。通过主页面,我们间接获取了子页面B,然后像正常操作dom一样,子页面A完成对子页面B的控制和操作。 先修改getAnotherChild()函数:
[code] //当前子页面与另外一个子页面之间的操作 function getAnotherChild() { alert(self.location.href); //当前页面的url //通过父页面,间接获取另外一个子页面 if (self != top) { var oDoc = top.parent.document; var oAnotherFrame = oDoc.frames["iframeB"]; //返回另外一个iframe alert(oAnotherFrame.location); alert(oAnotherFrame.document.body.innerHTML); alert(oAnotherFrame.document.documentElement.innerHTML); var oTxt = oAnotherFrame.document.getElementById("txtUserNameB"); alert(oTxt.value); //jeffery zhao } } [/code]注意:修改完getAnotherChild()函数,然后将子页面A(FrameA.aspx)中的textUserName的onblur事件改为 onblur="getAnotherChild()"就可以看到结果了.
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有