Maison > Article > interface Web > Méthodes et précautions pour appeler JS dans la fenêtre de classe parent enfant dans les compétences iframe_javascript
1. Avant-propos
Ma page utilise la fenêtre contextuelle d'EasyUI avec une iframe intégrée.
Premièrement : lorsque la fenêtre parent ouvre la fenêtre enfant, c'est une sous-page iframe qui ajoute des informations utilisateur. Après avoir cliqué sur Enregistrer, l'iframe de la fenêtre enfant appelle la méthode closeAddWindow() de la fenêtre parent, permettant à la fenêtre parent de se fermer. la page nouvellement ajoutée
Deuxièmement : la fenêtre parent ouvre une sous-fenêtre iframe pour définir les autorisations de l'utilisateur. Tout d'abord, l'ouverture de cette sous-fenêtre chargera toutes les autorisations existantes dans la table de base de données, puis la sous-fenêtre doit fusionner les informations d'autorisation chargées. html Ajouter à un ID Pour 481b26505f1e161e4c14f72858b14c10f16b1740fad44fb09bfe928bcc527e08, il y a un problème ici : une fois que la fenêtre parent a ouvert la fenêtre enfant et chargé toutes les autorisations, il est impossible d'ajouter du code HTML à la table. avec id="tb". Cette raison est très simple, car après que la fenêtre parent a appelé la fenêtre enfant pour charger toutes les informations d'autorisation, l'élément de table n'est pas trouvé car la page enfant n'a pas été complètement chargée. est également introduit ici. Enregistrez un événement onload pour l'iframe et attendez que le chargement soit terminé. Appelez ensuite la méthode append.
D'accord, c'est tout, jetons un coup d'œil à d'autres exemples ! ! ~~~~~~(*^__^*) Hé hé...
2. Appels de méthodes de fenêtre enfant et parent iframe
2.1 Utilisation de la grammaire
1. Fenêtre parent iframe intégrée
2. La fenêtre parent appelle la méthode de la fenêtre enfant
3. La fenêtre enfant appelle la méthode de la fenêtre parent
4. Méthode de fin de chargement iframe compatible avec le navigateur
if (myFrame.attachEvent) { myFrame.attachEvent("onload", function () { alert("兼容IE加载的加载方法"); }); } else { myFrame.onload = function () { alert("兼容其他浏览器加载方法"); }; }
2.2 Code de grammaire
Père.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>
FCild.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>
3. Quand utiliser myFrame.onload ou myFrame.attachEvent
Le framework front-end easyui framework est utilisé ici
<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>
4. Résumons quelques points clés
Lorsque vous appelez la méthode de fenêtre parent-enfant, faites attention à l'ordre de chargement pour obtenir les résultats souhaités, vous pouvez souvent utiliser alter() pour tester ou surveiller les outils de développement du navigateur