top.window.fnCallBack.push( { fn:.... } ); 直接push对象试试看

解决方案 »

  1.   

    要是分别定义三个变量数组,一个个push 根本没有问题
      

  2.   

    你是有其他操作重新操作过那个数组了吧?你把代码改下,把对象push到fnn这个测试数组里看看。
      

  3.   

    你需要的是这样的吗?<script>
    var st = [];
    </script>
    <iframe src=test_sub.htm name=na1></iframe>
    <iframe src=test_sub.htm name=na2></iframe>
    <iframe src=test_sub.htm name=na3></iframe>
    test_sub.htm<script src=scripts/json2.js></script>
    <script>
    function foo(na) {
      for(var i=0; i<parent.st.length; i++) {
        if(parent.st[i].name == self.name) {
          parent.st[i].value = document.getElementById([na]).value;
          return;
        }
      }
      parent.st.push({name : self.name, value : document.getElementById([na]).value });
    }
    function see() {
      alert(JSON.stringify(parent.st));
    }
    </script>
    <input type=text id=t>
    <input type=button value=修改 onclick=foo('t')>
    <input type=button value=查看 onclick=see()>
    虽然是按我的思路写的,与你给出的代码稍有不同。但并没有质的区别
    估计是你的其他代码影响了效果
      

  4.   

    只针对你这个代码解析:
    backWeb: function (ob,res) {
            $(ob).attr("data-rel", "back");
            top.window.fnn.push("22222"); //当调试到这里的时候,发现22222是可以被 push到fnn里面去的
            top.window.fnCallBack[top.window.fnCallBack.length - 1].param=res;//但是这个fnCallBack数组直接变成空了
            return true;
        },
    top.window.fnCallBack这个数组是有正确的,用push这个方法也是可行,为何出现LZ所说的第二种直接变空是因为LZ写错了,top.window.fnCallBack.length-1这个有问题,如果数组开始没有数据,top.window.fnCallBack.length-1=-1,你这是如何叫数组付值。修改成top.window.fnCallBack[top.window.fnCallBack.length].param=res这样,应该就能正确添加数组了
      

  5.   

    好吧,无语了,今天早上我知道了。那个fnCallBack这个变量名称是我从另一个项目拷贝的,这就是随便的一个变量命名,我觉得好,我又想不到其他单词,就用了。唉,找了老半天,在一个用户控件上面有的ready方法里面有个 fnCallBack.length=0,我那个页面正好用了这个控件,结果直接清空了。那时候我想老半天,打开一个页面进来的时候都有值,我既没有进行其他操作,也没有刷新页面,好端端的,到下一个方法就没了。