国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

iframe中子父類窗口調用JS的方法及注意事項

2019-11-20 11:43:29
字體:
來源:轉載
供稿:網友

一、前言

我頁面用的是EasyUI的彈出窗口里面嵌入一個iframe。

第一:父窗口打開子窗口是一個新增用戶信息的iframe子頁面,點擊保存后,子窗口iframe則去調用父窗口的function closeAddWindow()方法,讓父窗口去關閉新增頁面;

第二:父窗口打開一個設置用戶權限的iframe子窗口,首先打開這個子窗口會全部加載數據庫表中所有的存在的權限,然后子窗口需要把加載的權限信息拼接html  Append到一個ID為<table id="tb"></table>上,這里有個問題就是父窗口打開子窗口加載所有權限后根本無法把html 追加到id="tb"的表格上,這個原因很簡單,因為父窗口調用子窗口加載所有權限信息的后,沒有找到表格元素,因為子頁面還沒有完全加載完成,這種情況處理在這里也介紹了,給iframe注冊一個onload事件,等加載完成后再去調用追加的方法。

好了,簡單到這里,讓我們瞧瞧更多的事例吧!!~~~~~~(*^__^*) 嘻嘻……

二、iframe子父窗口方法調用

2.1語法使用

1、父窗口嵌入iframe  

復制代碼 代碼如下:

<iframe id='myFrame' name="myFrame" src="FChild.html" width='100%' height='100%' frameborder='0'></iframe>

2、父窗口調用子窗口方法  

復制代碼 代碼如下:

myFrame.window.sonMethod();

3、子窗口調用父窗口方法   

復制代碼 代碼如下:

 parent.fatherMethod();

4、兼容瀏覽器的iframe 加載完成方法

 if (myFrame.attachEvent) {      myFrame.attachEvent("onload", function () {        alert("兼容IE加載的加載方法");      });    } else {      myFrame.onload = function () {        alert("兼容其他瀏覽器加載方法");      };    }

2.2語法代碼

Father.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title></title></head><body>  <div>我是父窗口內容</div>  <div><input type="button" id="btnFather" value="調用子窗口方法" /></div>  <br />  <br />  <br />  <iframe id='myFrame' name="myFrame" src="FChild.html" width='100%' height='100%' frameborder='0'></iframe>  <script type="text/javascript">    document.getElementById("btnFather").onclick=function () {      myFrame.window.sonMethod();    }    function fatherMethod() {      alert("父窗口方法!");    }    if (myFrame.attachEvent) {      myFrame.attachEvent("onload", function () {        alert("兼容IE加載的加載方法");      });    } else {      myFrame.onload = function () {        alert("兼容其他瀏覽器加載方法");      };    }  </script></body></html>

FChild.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  <title></title></head><body>  <div style="border:1px solid red;"> 我是子窗體內容</div>    <div > <input type="button" id="btnSon" value="調用父窗口方法" /></div>    <script type="text/javascript">     document.getElementById("btnSon").onclick = function () {       parent.fatherMethod();     }     function sonMethod() {       alert("子窗口方法!");     }  </script></body></html>

三、什么情況下使用到 myFrame.onload 或者 myFrame.attachEvent

這里使用的是easyui框架前端框架 

<div id="divRoleUsers" title="設置用戶角色" class="easyui-window" closed="true" collapsible="false" minimizable="false" maximizable="false" style="width: 140px; height: 250px; padding: 5px;">   </div> <div > <input type="button" id="btn" value="設置用戶角色" /></div>  <script type="text/javascript"> $("#btn").click(function () {showSetUserRoleWindow();});    //設置用戶角色    function showSetUserRoleWindow() {      var getSelections = $("#tt").datagrid("getSelections");      if (getSelections.length > 1 || getSelections.length == 0) {        $.messager.alert("錯誤提示", "請選中一行數據!", "error");        return false;      }      var data = getSelections[0]; //獲取選中的一行所有json的數據      //if ($("#divRoleUsers #iframe").length != 0) {      //  $("#divRoleUsers #iframe").remove();      //}      //  $('#divRoleUsers').append("<iframe id='iframe' name='iframe' src='RoleUsers_Update.aspx?UserID=" + data.UserID + "' width='100%' height='100%' frameborder='0'></iframe>");      //錯誤做法!:上面src='RoleUsers_Update.aspx?UserID=" + data.UserID + "'   這里通過拼接參數iframe的src,      //然后通過子窗口 parent.document.getElementById("iframe").getAttribute("src");//獲取父窗體iframe的src 發現根據獲取不到UserID的值,為null,也是因為加載順序先后的問題,導致我要用給iframe注冊onload事件后才能獲取到我需要的結果      //if (myframe.attachEvent) {      //  myframe.attachEvent("onload", function () {      //    alert("Local iframe is now loaded.");      //    myframe.window.loadAllRole();      //  });      //} else {      //  myframe.onload = function () {      //    alert("Local iframe is now loaded.");      //    myframe.window.loadAllRole();      //  };      //}      if ($("#divRoleUsers #myframe").length != 0) {   //這一步是必須的!!!,因為不加這一句下面onload綁定事件只執行一次,我需要每次加載完iframe都調用一次子窗口的方法!        $("#divRoleUsers #myframe").remove();      }      $('#divRoleUsers').append("<iframe id='myframe' name='myframe' src='RoleUsers_Update.aspx' width='100%' height='100%' frameborder='0'></iframe>");      if (myframe.attachEvent) {        myframe.attachEvent("onload", function () {          myframe.window.loadAllRole();           myframe.window.loadUserRole(data.UserID);        });      } else {        myframe.onload = function () {          myframe.window.loadAllRole();     //調用子窗口iframe里面的方法加載所有的角色checkbox          myframe.window.loadUserRole(data.UserID);   //接著傳遞用戶ID過去給子窗口的方法,給用戶擁有的角色設置checkbox選中        };      }      $('#divRoleUsers').window('open');    }  </script>

 四、總結幾個關鍵點吧

父子窗口方法的調用,注意加載的先后順序才能獲取到想要的結果,遇到問題常用alter()測試或者瀏覽器的開發者工具監控

以上內容就是本文中介紹iframe中子父類窗口調用JS的方法及注意事項,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丹阳市| 镇沅| 龙游县| 濮阳市| 许昌县| 邢台市| 宜州市| 来宾市| 六盘水市| 岳阳县| 太谷县| 云霄县| 东台市| 礼泉县| 新闻| 通化市| 武义县| 泗水县| 电白县| 淮阳县| 太仓市| 门源| 海盐县| 孟村| 新密市| 崇文区| 丁青县| 东山县| 图们市| 梧州市| 定兴县| 琼海市| 石河子市| 全南县| 兰溪市| 咸阳市| 寿光市| 陇西县| 同江市| 泉州市| 珠海市|