一、问题描述
1、督办操作界面。图中框住的窗口,iframe的id为layui-layer-iframe1。
2、在督办操作界面中点击常用语配置,弹出常用语管理界面,iframe的id为layui-layer-iframe2。双击常用语,可以将常用语回显在督办操作界面中。
3、使用layer.open,在督办操作界面中打开常用语管理界面,然后在常用语管理界面中对父窗口督办操作界面进行回显就可以了。但是子iframe大小不能比父iframe大,进而影响了界面的展示。
二、解决方法
1、使用top.layer.open,在督办操作界面中打开常用语管理界面。现在大小只会受到最顶层top层的限制了,常用语不能回显了。因为现在常用语管理界面已经不是督办操作界面的子iframe了,所有不能在常用语管理界面直接对督办操作界面进行操作。
2、解决方法,获取督办操作界面iframe的id路径,从当前层一直到top层,然后传给常用语管理界面。
function openPhraseEdit() {
top.layer.open({
type: 2,
title: "常用语管理",
area: ["1000px", "700px"],
content: top.getRealPath() + "/hfCityPhrase/openPhrase?framePath=" + getFramePath(),
});
}
/*获取当前iframe层到top层的id集合(每个iframe层必须有id)*/
function getFramePath() {
var framePath = '';
var frameIndex = 0;
var win = window;
var frameId;
while (win.frameElement != null) {
var frame = win.frameElement;
frameId = win.frameElement.id;
if (frameId == 'top')
break;
if (framePath == '') {
framePath += frameId;
} else {
framePath += "," + frameId;
}
win = win.parent;
}
return framePath;
}
3、根据督办操作界面传过来iframe的id路径,在常用语管理界面中获得督办操作界面的对象,这样子就可以对其进行界面的操作,常用语进行回显了。
常用语管理界面中的代码:
/*在常用语管理界面选择常用语并回显到督办操作界面中,最后还要关闭常用语管理界面*/
function setPhraseContentAndClose(content) {
var win = getFrameContentWindow('${framePath}');//获取督办操作界面对象
win.setContent(content);//
var currentIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(currentIndex);//关闭常用语管理界面
}
督办操作界面中的代码:
function setContent(content) {
$("#superviseOpinion").val(content);
}