子窗口怎么返回数据给父窗口?

我用open方法,打开一个子窗口,这个子窗口的数据怎么返回诶父窗口呢,我用了window.opener.getElementBy..()都不行,怎么回事呢?

图片说明
图片说明
图片说明
有问题留言

window.opener.document.getElementById("xxxx").

https://www.cnblogs.com/qianxunpu/p/7086411.html

如下是使用layui 框架展示子页面像父页面传值示例用法:

<br> layui.use([&#39;tree&#39;, &#39;form&#39;, &#39;layer&#39;, &#39;element&#39;], function () {<br> var layer = layui.layer, form = layui.form, $ = layui.jquery, element = layui.element;</p> <pre><code> var nodeJson = &quot;&quot;; $.ajax({ url: &quot;../ashx/sysmanage.ashx&quot;, type: &quot;get&quot;, dataType: &quot;json&quot;, data: { action: &quot;gettreejson&quot; }, success: function (data) { if (data != &quot;&quot;) { layui.tree({ elem: &#39;#tree1&#39;, //指定元素 target: &#39;_blank&#39;, //是否新选项卡打开(比如节点返回href才有效) spread: false, //展开 click: function (item) { //点击节点回调 //layer.msg(&#39;当前节名称:&#39; + item.name + &#39;&lt;br&gt;全部参数:&#39; + JSON.stringify(item)); //console.log(item); $(&quot;#select_id&quot;).text(item.id); $(&quot;#select_protype&quot;).val(item.name); parent.$(&quot;#UpFile_txt_Dept_Name&quot;).val(item.name); parent.$(&quot;#UpFile_category_id&quot;).val(item.id); }, nodes: data, }); } else { alert(&quot;Node data found!&quot;); } } }); }); } $(&quot;#btn_select&quot;).click(function () { layui.use(&quot;layer&quot;, function () { var layer = layui.layer; layer.open({ title: &#39;选择商品分类&#39;, type: 2, area: [&#39;350px&#39;, &#39;360px&#39;], fixed: false, //不固定 maxmin: true,//父子 content: &#39;../WebUserControl/CategoryTree.aspx&#39; //, //success: function (layero, index) { //var body = layer.getChildFrame(&#39;body&#39;, index); //var iframeWin = window[layero.find(&#39;iframe&#39;)[0][&#39;name&#39;]]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method(); //console.log(body.html()) //得到iframe页的body内容 //body.find(&#39;input&#39;).val(&#39;Hi,我是从父页来的&#39;)//父页面向子页面传值 子页面有一个 type=input 类型的文本框 //body.find(&quot;input[id^=&#39;select_protype&#39;]&quot;).val(&#39;Hi,我是从父页来的&#39;)//父页面向子页面传值 子页面有一个 type=input 类型的文本框 //document.getElementById(&quot;txt_Dept_Name&quot;).value = &quot;succ&quot;; //} //, //cancel: function (index) { //} }); }); }); </code></pre>

直接window.opener.fun,直接调用父窗口的函数就可以,值也可以传回来的,如果要操作元素,在父窗口的函数里边操作就可以

使用confirm弹框,可以取到数据返回给父窗口

可以使用postMessage onmessage 在子窗口使用postMessage发送数据,在父窗口使用onmessage获取数据

你如果是使用Layer.open的话,open含有按钮,按钮点击函数function(index, layero),父窗体可以使用layero来获取到子窗体的数据。
我自己写的代码给你看下,希望可以解决你的问题:
parent.layer.open({
title: '选择文件',
offset: ['120px', '500px'],
closeBtn: 0,
content:'

'+
'

请选择打开文件:

'+
'
'+
'
',
btn:['取消', '确认'],
yes:function(index, layero){
parent.layer.close(index);
},
btn2:function(index, layero){

//FileName = layero.eq(0).children('div').eq(1).children('div').children('input').val();
FileName = layero.eq(0).find("input").val(); //获取文件的打开路径
//console.log(FileName);
            mutual();
            GetData();
        }
    });

推薦使用FineUI,個人覺得還不錯,也有父子窗口傳值實例。

window.opener.document.getElementById("父页面id").value=子页面的值;

window.opener.document.getElementById("父页面id").value=子页面的值;通过这样的赋值就可以,


layui.use(['tree', 'form', 'layer', 'element'], function () {
var layer = layui.layer, form = layui.form, $ = layui.jquery, element = layui.element;

 var nodeJson = ""; $.ajax({ url: "../ashx/sysmanage.ashx", type: "get", dataType: "json", data: { action: "gettreejson" }, success: function (data) { if (data != "") { layui.tree({ elem: '#tree1', //指定元素 target: '_blank', //是否新选项卡打开(比如节点返回href才有效) spread: false, //展开 click: function (item) { //点击节点回调 //layer.msg('当前节名称:' + item.name + '<br>全部参数:' + JSON.stringify(item)); //console.log(item); $("#select_id").text(item.id); $("#select_protype").val(item.name); parent.$("#UpFile_txt_Dept_Name").val(item.name); parent.$("#UpFile_category_id").val(item.id); }, nodes: data, }); } else { alert("Node data found!"); } } }); }); } $("#btn_select").click(function () { layui.use("layer", function () { var layer = layui.layer; layer.open({ title: '选择商品分类', type: 2, area: ['350px', '360px'], fixed: false, //不固定 maxmin: true,//父子 content: '../WebUserControl/CategoryTree.aspx' //, //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,我是从父页来的')//父页面向子页面传值 子页面有一个 type=input 类型的文本框 //body.find("input[id^='select_protype']").val('Hi,我是从父页来的')//父页面向子页面传值 子页面有一个 type=input 类型的文本框 //document.getElementById("txt_Dept_Name").value = "succ"; //} //, //cancel: function (index) { //} }); }); });