子页面像父页面传递参数--数组
在项目中修改其他同事的bug,发现在IE11上不兼容,会提示js之类的错误,删除一个元素,结果多个一起被删除,因为引用地址找不到了。
之前的代码
子页面保存的时候触发,找父页面的窗体内容
1 function save(){ 2 var productEditPage = $(parent.document).contents().find("#layui-layer-iframe" + parent.layerIndex)[0].contentWindow; 3 var selections = getAllSelections(); 4 $(selections).each(function (index, e) { 5 productEditPage.productSchemeData.productSchemeBom.push(e); //父页面的对象 6 }); 7 productEditPage.loadBom(); 8 delete parent.layerIndex; 9 var index = parent.layer.getFrameIndex(window.name); 10 parent.layer.close(index); 11 }
在父窗体中取出子窗体赋值的数据 productSchemeData.productSchemeBom,结果在IE上一直报错,因为子页面关闭了,对应的引用也被关闭了,在父页面找不到对应的引用
这个坑我调试了一上午,在网上找很多帖子,没有找到比较合适的,后来自己想想作为参数的形式进行传达,如果对数据进行删除,那么删除之前对数据进行深拷贝,就不会出现原来引用地址不存在的问题了
解决方式:
1 function save(){ 2 var productEditPage = $(parent.document).contents().find("#layui-layer-iframe" + parent.layerIndex)[0].contentWindow; 3 var selections = getAllSelections(); 4 var productAdd =new Array(); 5 $(selections).each(function (index, e) { 6 //productEditPage.productSchemeData.productSchemeBom.push(e); 7 productAdd.push(e); 8 }); 9 productEditPage.loadBom(productAdd); 10 delete parent.layerIndex; 11 var index = parent.layer.getFrameIndex(window.name); 12 parent.layer.close(index); 13 }
在子页面new 一个数组,赋值,作为参数传递给父页面
var productAdd =new Array();
$(selections).each(function (index, e) {
productAdd.push(e);
});
productEditPage.loadBom(productAdd);
在父页面对其进行深拷贝删除等相关操作
1 function loadBom(productAdd) { 2 if(productAdd!=undefined&&productAdd!=null&&productAdd!=""&&productAdd.length>0) 3 { 4 var newArray=new Array(); 5 if(productSchemeData.productSchemeBom!=null&&productSchemeData.productSchemeBom.length>0) 6 { 7 newArray=productSchemeData.productSchemeBom.concat(productAdd); //数组拼接 8 productSchemeData.productSchemeBom= $.extend(true,[],newArray); //深拷贝 9 } 10 else 11 { 12 productSchemeData.productSchemeBom= $.extend(true,[],productAdd); //深拷贝 13 } 14 } 15 ………………
,深拷贝后的数据,随便你怎么删除都是不会报错了。