layer是一款非常优秀的弹窗控件,最近在使用layer做开发的时候遇到一个需求:layer子窗体关闭后向父窗体传值,然后父窗体根据传值决定下一步操作。

如果只是单纯的子窗体关闭后,父窗体进行相应操作那么我们可以使用父窗体的end方法:

示例1,子窗体关闭后父窗体刷新:

子窗体代码:

window.parent.layer.closeAll();

父窗体代码:


$("#new").on('click',function(){
  var url = "{:url('index/file/create')}";
  layer.open({
    type: 2,
    title: '新增案卷',
    shadeClose: true,
    shade: 0.5,
    area: ['380px', '300px'],
    content: [url],
    end: function () {
      location.reload();
    }
  });
})

上面代码在子窗体中调用父窗体的关闭代码,然后利用父窗体的end方法实现响应,达到子窗体关闭后父窗体做出响应。

但是如果我们有更高的需求,比如说根据子窗体关闭时传的值来决定父窗体是刷新还是跳转,那怎么办呢?

示例2,子窗体关闭后向父窗体传值,然后父窗体根据传值决定下一步操作:

子窗体代码:

parent.callback(data.data);

window.parent.layer.closeAll();

父窗体代码:

//layer子窗体控制父窗体

function callback(id){
  if(id>0){
    var url = "{:url('index/file/archives')}?id="+id;
    location.href = url;
  }else{
    location.reload();
  }
}

上面代码在子窗体中先调用父窗体定义的回调函数,然后在父窗体定义对应的回调函数即可。