子页面像父页面传递参数--数组

在项目中修改其他同事的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 }
View Code

在父窗体中取出子窗体赋值的数据 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 }
View Code

在子页面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 ………………
View Code

,深拷贝后的数据,随便你怎么删除都是不会报错了。

 

转载于:https://www.cnblogs.com/songStar/p/10974386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值