layui中从子窗口传递数据到父窗口,第三个子弹层的值传给第二个弹层

最近做一个项目的需要多个弹层,每个弹层中还需要数据传递,

经过测试,以下方法三个弹层才有效,如果只是有两个弹层,请用其它方法

大概如图,看图自己应该明白

1412138-20180703205141924-1408185467.png

如何在在b页面选择好的值传给a页面的问题,这个问题我百度了好久都没有解决
后来参考了文档

http://fuxiao.io/practice/docs/#/layui/layer/iframes

加上自己理会,终于解决问题了,这个文档看了好几次还是不太明白(个人理解能力差),后来加班自己边动手边理解,解决问题了

上代码

主页面(top.html)的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>top</title>
    <style>
        .top{
            margin-left: 100px;
            margin-top: 100px;
        }
    </style>

</head>

<body>

    <div class="top">
        <h1>我是top页面</h1>
        <button class="new-add">点我弹出a页面</button>
    </div>

<script src="../assets/scripts/jquery.min.js"></script>
<script src="../js/plugins/layui/layui.all.js" type="text/javascript" charset="utf-8"></script>

<script>

</script>

<script type="text/javascript">
    var layerFrameConfig = {};// 在主页面上定义变量,保存每个弹层的layero,和index
    $('.new-add').on('click',function () {
        var url = 'http://localhost:63342/test-webapp/test2/a.html?_ijt=788n4ijd8brnpou9iu6s365hom'
        parent.layer.open({
            type: 2,
            title: '我是a页面',
            isOutAnim:false,
            area: ['660px','480px'],
            content: [url],
            success: function(layero, index){
                // 把a页面的layero和index保存到top页面中的layerFrameConfig变量中
                // 在b页面就可以通过 top.layerFrameConfig 等获取a页面的windown对象

                // 如果不是在主页面,要加top 才能获取layerFrameConfig , 如: top.layerFrameConfig 
                layerFrameConfig.iframeA = {
                    layer_index: index,
                    layer_layero: layero
                }

            }
        })
    })


</script>


</body>
</html>

a 页面的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>a</title>
    <style>
        .a{
            padding: 20px;
        }

    </style>

</head>

<body>
<div class="a">
    <button class="new-add">我是a页面</button>
    <h1>我是通过top页面打开的弹层a子页面</h1>
    <input id="inputa" type="text" value="a">
</div>

<script src="../assets/scripts/jquery.min.js"></script>
<script src="../js/plugins/layui/layui.all.js" type="text/javascript" charset="utf-8"></script>
<!-- 对应JS -->

<script>

</script>

<script type="text/javascript">

    $('.new-add').on('click',function () {
        var url = 'http://localhost:63342/test-webapp/test2/b.html?_ijt=788n4ijd8brnpou9iu6s365hom'
        parent.layer.open({
            type: 2,
            isOutAnim:false,
            title: '我是b页面',
            area: ['660px','480px'],
            content: [url],
            success: function(layero, index){
                // 把b页面的layero和index保存到top页面中的layerFrameConfig变量中
//                top.layerFrameConfig.iframeB = {
//                    layer_index: index,
//                    layer_layero: layero
//                }
            }
        })
    })

</script>
</body>
</html>


b页面的代码


<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>b</title>

    <style>
        .b{
            padding: 20px;
        }
    </style>
</head>

<body>

<div class="b">
    <h2>把值传给第a页面的input,也就是相对于来说b的父页面</h2>
    <button class="save">点我传值给父页面(a页面)的input框</button>
    <h4>我是通过弹层a子页面点击弹出来的页面</h4>
</div>
<script src="../assets/scripts/jquery.min.js"></script>
<script src="../js/plugins/layui/layui.all.js" type="text/javascript" charset="utf-8"></script>

<!-- 对应JS -->

<script>

</script>

<script type="text/javascript">


    // 此段代码处于 iframeB 页面中
   var lfc = top.layerFrameConfig;
   var iframeAIndex = lfc.iframeA.layer_index;
   var iframeALayero = lfc.iframeA.layer_layero;
//   console.log(iframeAIndex)
//   console.log(iframeALayero)

   var iframeAWin = top[iframeALayero.find('iframe')[0]['name']];
   var index = parent.layer.getFrameIndex(window.name); // 获取当前的index
   $('.save').click(function () {
       iframeAWin.$('#inputa').val('我是B(子)页面传来的值');
       parent.layer.close(index);
   });

</script>


</body>
</html>

转载于:https://www.cnblogs.com/ybixian/p/9260579.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
layui,父窗口可以通过窗口的iframe元素来获取窗口的json数据。你可以使用以下方法: 1. 在父窗口,使用layui的layer.open()方法打开窗口,并将窗口的URL指定为一个页面,该页面返回要传递给父窗口的json数据。 2. 在窗口的页面,通过父窗口的window对象的layer.getFrameIndex()方法获取当前窗口的索引。 3. 使用layui的layer.getChildFrame()方法获取窗口的iframe元素。 4. 使用iframe元素的contentWindow属性获取窗口的window对象。 5. 在父窗口,通过窗口的window对象来获取窗口的json数据。 下面是一个示例代码: 在父窗口: ```javascript // 打开窗口 layer.open({ type: 2, title: '窗口', content: 'child.html', area: ['500px', '300px'], success: function(layero, index){ // 获取窗口的索引 var childIndex = layer.getFrameIndex(layero.find('iframe')[0]); // 获取窗口的iframe元素 var iframe = layer.getChildFrame('body', childIndex); // 获取窗口的window对象 var childWindow = iframe[0].contentWindow; // 在父窗口获取窗口的json数据 var jsonData = childWindow.getJsonData(); console.log(jsonData); } }); ``` 在窗口的child.html页面: ```javascript // 窗口的代码 function getJsonData() { // 返回要传递给父窗口的json数据 return { name: 'John', age: 25, city: 'New York' }; } ``` 请注意,这只是一个简单的示例,你可以根据自己的需求进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值