JS For Call循环停止后调用函数

时间:2013-12-05 18:55:36

标签: javascript jquery

我有一个包含页面内容的Javascript数组。为了在页面加载时在正确的位置绘制所有对象,我遍历数组并拉出元素。这非常有效,直到我允许对象在其中生成子项。

当前的数组结构是 0-> {elements=[] frame={I keep the frame attributes here with key value pairs}}, 1-> {elements=[] frame={}}

但是,我刚开始在每个对象的元素数组中添加子元素。所以现在我必须循环/绘制每个元素,检查是否有任何子元素,如果有,那么我也必须绘制它们。

我遇到的问题是,在我遍历第一个0对象之后,它的子节点for循环停止运行。是因为我多次调用同一个函数吗?我之前已经这样做了所以我不认为这是发生了什么。

this.run_loop = function (spawn, dom) {
    console.log(spawn)
    alert(spawn.length)
    for (i = 0; i < spawn.length; i++) {
        console.log(spawn[i])
        //alert("i one")    
        var newdom = dom + "_" + i;
        this.synthesize_elements(spawn[i], dom, newdom)
        if (spawn[i].hasOwnProperty('elements')) {
            //alert("FOUND")
            var newarray = spawn[i]['elements'];
            if (newarray.length > 0) {
                this.run_loop(newarray, newdom)
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这有点旧了,但我遇到了类似的问题,并在这里找到了解决方法,但我想出来并认为如果有其他人遇到这个问题我会发布解决方案。在我的情况下的问题(在你的情况下看起来虽然我不能确定)是在for循环的声明中:

for (i = 0; i < spawn.length; i++)

你并没有宣称我是一个新的变种。所以如果有什么内容

this.run_loop(newarray, newdom)

函数还操作一个名为i的计数器变量,它不会被声明为一个新的var,它也会改变你的外部范围中的一个变量,如果它超过了spawn的长度就会把你踢出循环

总是声明:

for (var i; i< spawn.length; i++)
在你的循环中

或确保你的计数器是唯一的。