弹出层提交信息后,刷新的是整个页面,并不是真正的父iframe,请问如何只刷新父iframe?

提问 已结
10 391
ccss
ccss 6天前
悬赏:20飞吻
版本:layui 浏览器:
弹出层提交信息后,刷新的是整个页面,并不是真正的父iframe,请问如何只刷新父iframe?




并附上代码:
后台页面 url:admin/index/admin
<iframe data-frameid="web-72" scrolling="auto" frameborder="0" src="/admin/ad/index" style="width: 100%; height: 468px;"></iframe>
列表页面 url:admin/ad/index
table.on('toolbar(laylist)', function(obj){
var checkStatus = table.checkStatus(obj.config.id);
switch(obj.event){
case 'add':
var ad=top.layer.open({
type: 2,
shade: 0.8,
maxmin: true, //开启最大化最小化按钮
content: '/admin/ad/create',
});
top.layer.full(ad);
break;
};
});
添加信息页面 url:admin/ad/create
form.on('submit(submit)', function(data){
$.ajax({
type: "post",
url: '{:url("api/ad/save")}',
data: data.field,
success: function(res){
if(res.state == "1") {
layer.msg(res.msg, {
icon: 6,
}, function(){
var index=parent.layer.getFrameIndex(window.name);
top.layer.close(index);
parent.layer.reload();
});
}else{
layer.msg(res.msg,{icon:5},function(){});
}
}
});
return false;
});
回帖
  • var tagDiv = window.parent.document.getElementById("getWidth").getElementsByTagName("div");
    var elements = new Array();
    layui.each(tagDiv, function(index, item) {
    if (item.className == "layui-tab-item layui-show") {
    elements.push(item)
    }
    })
    elements[0].getElementsByTagName("iframe")[0].contentWindow.location.reload(true);
    tagDiv是为了获取你这一行的元素
    然后去循环找到“layui-tab-item layui-show”你当前显示的右侧的页面
    然后将右侧的页面元素找到,存到数组中,最后在找到当前页面iframe元素刷新。
    0 回复
  • 获取父页面window对象 刷新
    0 回复
  • ccss
    6天前
    @大黄蜂 ajax提交成功后,有设置父栏目刷新的,代码里有“parent.layer.reload();”,但是刷新的是整个后台的页面,并不是父iframe的页面。
    奇怪的是,用parent.location.href获取的URL值就是这个父iframe的URL地址
    不知道为何刷新父iframe不成功
    0 回复
  • ccss
    6天前
    @大黄蜂 刚回复错了,用parent.location.href获取的URL值也是整个后台的URL地址,parent获取不到父iframe[汗]
    0 回复
  • parent 不是iframe 要top['name'] =... 去获取
    0 回复
  • https://www.layui.com/doc/modules/layer.html#layer.getFrameIndex
    0 回复
  • ccss
    6天前
    @大黄蜂 感谢回复,
    百度“layui 子页面刷新父页面”搜索出来的都是
    parent.location.reload(); // 父页面刷新
    所以就试了这个方法

    layer.getFrameIndex(windowName)
    文档描述的是获取当前iframe层的索引,并关闭layer,不知道和父iframe有什么关系呢?
    0 回复
  • ccss
    6天前
    @苍狗又白云 感谢回复
    iframe页面的选项卡代码如下
    <ul class="layui-tab-title">
    <li class="">
    <i class="fa fa-home"></i>
    <cite>控制面板</cite>
    <i class="layui-icon layui-unselect layui-tab-close">ဆ</i></li>
    <li lay-id="web-72" class="layui-this">广告管理<i class="layui-icon layui-unselect layui-tab-close">ဆ</i></li></ul>
    执行如下,会提示出错
    var tab = window.parent.document.getElementsByClassName("layui-tab-title").getElementsByTagName("li");
    console.log(tab);



    0 回复
  • @ccss 你给<ul class="layui-tab-title">加一个id,写成这样<ul class="layui-tab-title" id="layui-tab-title">,用getElementById()去获取元素。
    但是我看你这样写,没法获取到页面右侧区域的父节点。
    var tagDiv = window.parent.document.getElementById("这里右侧界面的父元素id").getElementsByTagName("这里写tab标题栏的元素名");
    0 回复
  • ccss
    5天前
    @苍狗又白云 感谢回复,测试成功,如下2段代码均可
    1、
    var refresh=$('.layui-show iframe', window.parent.document).attr('src');
    $('.layui-show iframe', window.parent.document).attr("src", refresh);
    2、
    var iframe=$('.layui-show iframe', window.parent.document)
    iframe[0].contentWindow.location.reload(true);
    0 回复