layer中的iframe窗数据的传递

提问 未结
24 702
北鸟南游
北鸟南游 2017-10-9
悬赏:20飞吻
版本:独立版layer 浏览器:
iframe窗的数据传递,在第一个层的open的页面中,会有input表单,怎么把这个页面表单中的数据传递给下一个open的页面。
回帖
  • 凉情
    2017-10-9
    你可以尝试本地数据储存。读取后清空
    //【增】:向test表插入一个nickname字段,如果该表不存在,则自动建立。
    layui.data('test', {
    key: 'nickname'
    ,value: '贤心'
    });
    //【删】:删除test表的nickname字段
    layui.data('test', {
    key: 'nickname'
    ,remove: true
    });
    layui.data('test', null); //删除test表

    //【改】:同【增】,会覆盖已经存储的数据

    //【查】:向test表读取全部的数据
    var localTest = layui.data('test');
    console.log(localTest.nickname); //获得“贤心”
    0 回复
  • 0 回复
  • success: function(layero, index){
    var body = layer.getChildFrame('body', index);//获取到子页面的内容
    var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象
    body.find('#accountName').val(data.accountName);
    body.find('#accountPassword').val(data.accountPassword);
    body.find('#accountHolder').val(data.accountHolder);
    body.find('#department').val(data.department);
    body.find('#application').val(data.application);
    body.find('#amid').val(data.id);
    body.find("input:radio[name='cm.gender'][value='"+data.gender+"']").prop('checked','checked');
    body.find("input:radio[name='cm.state'][value='"+data.state+"']").prop('checked','checked');
    iframeWin.show();//执行iframe页的方法:
    }
    0 回复
  • layer.open({
    type: 2,
    content: 'test/iframe.html',
    success: function(layero, index){
    var body = layer.getChildFrame('body', index);
    var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
    console.log(body.html()) //得到iframe页的body内容
    body.find('input').val('Hi,我是从父页来的')
    }
    });
    请注意上面代码中的:
     var body = layer.getChildFrame('body', index);
    当然还有一个更简单的方法就是:定义一个全局变量,然后在open中赋值,就可以在想要使用的地方使用了
    0 回复
  • @驊驊龔頾 不对,我是要把第一个iframe页的数据传递给第二个iframe页。你给的例子是父页面获取iframe页面的内容,而且只是一层iframe页
    0 回复
  • @随❤所☆预 不是获取到子页面的内容,我是要把第一个的iframe弹层数据传递给下一个iframe弹层
    0 回复
  • @北鸟南游 那就用第二个方法,定义全局变量,或者是在第一个iframe中直接把值赋给第二个iframe中的某个元素
    0 回复
  • @驊驊龔頾 有例子吗,这么说还是不知道怎么解决
    0 回复
  • @北鸟南游 第二个iframe不是第一个iframe打开的?是的话那第一个iframe不就是第二个iframde的父页面吗[思考]
    0 回复
  • @随❤所☆预 是的,我需要父页面的数据,传递给子页面
    0 回复
  • @北鸟南游 你试过刚刚那方法不行?
    0 回复
  • @随❤所☆预 不行
    0 回复
  • @北鸟南游 父页面的数据传给子页面不就是刚才我说的那种方法吗?
    0 回复
  • @北鸟南游 你是先弹出第二个iframe再有数据,还是先填数据再弹出第二个iframe?
    0 回复
  • @驊驊龔頾 这个方法是父页面获取子页面数据的方法吧
    0 回复
  • @随❤所☆预 先在第一个iframe中的表单填数据,然后才打开第二个iframe页面
    0 回复
  • @北鸟南游 下面说一下全局变量的方法
    //父页面
    var aaa = '';

    aaa = 'aaaaa'; //在相应的位置给aaa进行赋值

    layer.open({
    type: 2,
    content: 'test/iframe.html',
    success: function(layero, index){
    $("#子页面元素").text(aaa);
    }
    });
    0 回复
  • @北鸟南游 那应该是可以传值的,是不是你获取到的表单数据都是空的?你随便填个值传过去看看,如果是下拉或选择框的话,用重新渲染的
    0 回复
  • @驊驊龔頾
    layer.open({
    type: 2 //此处以iframe举例
    ,title: '新员工编号'
    ,area: ['390px', '200px']
    ,shade: .2
    ,fixed: true //允许拖动
    ,maxmin: true
    ,content: 'addMember.html'
    ,btn: ['确定'] //只是为了演示
    ,yes: function(){
    console.log('1111')
    layer.open({
    type:2,
    title:'覆盖在最顶层',
    area:['1100px','630px'],
    shade:0.2,
    offset:[],
    maxmin:true,
    content:'editNewMember.html',
    data:app.gridPagerData.business_code,
    btn:['继续弹出','全部关闭'],
    yes:function(){
    },
    btn2:function(){
    layer.closeAll()
    },
    zIndex:layer.zIndex,
    success:function(layero,index){
    var body = layer.getChildFrame('body', index);
    var iframeWin = window[layero.find('iframe')[0]['name']];
    // console.log($('#add_business_code').val()) //得到iframe页的body内容
    body.find('#add_business_code').val('add_business_code')
    console.info('iframe第一层的页面',body.find('#add_business_code').val('add_business_code'))
    }
    })
    }
    ,zIndex: layer.zIndex //重点1
    ,success: function(layero,index){
    layer.setTop(layero); //重点2


    }
    });
    这是我的代码,在一个页面中加入上面的代码。
    1,在一个页面中有一个按钮btn,点击按钮弹出addMember.html。
    2,弹出的addMember.html页面有一个输入表单,表单里填写数据
    3,在addMember.html中有个按钮,可以弹出editNewMember.html页面,需要将addMember页面的数据,传递给editNewMember.html页面。
    0 回复
  • @随❤所☆预 是的,数据是空的,是undefined
    0 回复
  • @北鸟南游 你第二个iframe弹出的js必须写在你addMember.html页面才能获取到这个页面的数据,你直接全写在父页面当然没有这些数据了。。。。
    0 回复
  • @北鸟南游 呃算了,你这太费事了,直接用缓存吧,把需要的数据先放到sessionStorage里面,然后在使用的时候获取这个值进行使用就行了,这个类似全局变量,不过比全局变量要好用一点
    sessionStorage.setItem("aaa",aaa);   //这是插入缓存,后面的aaa表示需要操作的字符串,前面的相当于变量(key,value)

    sessionStorage.getItem("aaa"); //这是获取缓存,这里的aaa是上面的变量(key)
    0 回复
  • @随❤所☆预 官网上的iframe窗是写在一起的,这个第二个弹出的iframe大小不受第一个的控制,否则就嵌套在第一个的iframe框中
    0 回复
  • @北鸟南游 下班了走人啦,你也可以自己想想办法[嘻嘻]
    0 回复