zoukankan      html  css  js  c++  java
  • 子页面像父页面传递参数--数组

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

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

  • 相关阅读:
    一个男人该有的气质
    有没有想过,也许一辈子你都是个小人物
    System.IO.File.WriteAllText("log.txt", "dddd");
    cn_windows_10_enterprise_version_1703_updated_june_2017_x64_dvd_10720588.iso
    Visual Studio 2015 update 3各版本下载地址
    优麒麟 16.04 LTS(长期支持)版本
    干货!最全羽毛球技术动态分解gif图
    添加缓存 绝对时间过期
    C#缓存absoluteExpiration、slidingExpiration两个参数的疑惑
    无法解析依赖项。“Microsoft.Net.Http 2.2.29”与 'Microsoft.Net.Http.zh-Hans
  • 原文地址:https://www.cnblogs.com/songStar/p/10974386.html
Copyright © 2011-2022 走看看