在“layer子窗体关闭后向父窗体传值的办法”一文中我们介绍了在layer子窗体向父窗体传值的办法。但是有的时候,我们需要实现layer子窗体大于父窗体的效果,这种情况下我们的弹窗代码是parent.layer.open而不是layer.open,这时篇头文章中的办法是无效的。那么要怎么实现layer子窗体大于父窗体并能通过子窗体向父窗体传值呢?具体方法如下:

假设有页面A,B,C。其中A为主页面、B为A中通过layer.open弹出的子窗体,C为在B窗体中通过parent.layer.open弹出的子窗体,那么现在C窗体已经可以大于B窗体了,我们要解决的就是C窗体向B窗体传值,其实就是篇头文章的一种变通做法。

1.A页面中定义回调函数:


function callback(id){
    $('#layui-layer-iframe1').contents().find('#number').val(id);
}

说明,layui-layer-iframe1为通过审查代码获得的layer.open的B窗体ID,经过反复查看确认不会变化,是固定值,这段代码的意思就是当回调函数执行时,将B窗体中id为number的文本框值设置为传过来的参数id。

2.B窗体中要接受传值的html代码:


<input type="text" class="form-control" id="number" name="number" value="">

3.C窗体中的函数调用代码:


function select(id){
    parent.callback(id);
    var index = parent.layer.getFrameIndex(window.name);
    parent.layer.close(index);
}

说明:C窗体中的回调代码,执行该函数后回调A页面中的函数callback。

总结:其实就是要理解layer弹出层之间的关系,因为通过parent.layer.open的方式打开弹窗C,所以实际上C弹窗的父页面是A,因此执行回调函数要写到A中,然后再通过A的回调函数向B窗体中写入数据即可。