递归工作在Chrome / Firefox但不是IE7

时间:2010-12-13 20:22:25

标签: javascript jquery

我不确定为什么这在IE7中永远不会完成,但在其他浏览器中也是如此。我在if (i < l)之后发出警报,它在IE7中触发一次但在此之后不会继续。任何线索?

// i, l, object, array, tr, table all determined up here.
function iterate(i, callback) {
    if (i < l) {
        tr = buildTableRow(object[array[i]]);
        tr.attr({
            "id": 'theObjectIs' + array[i]
        });
        table.append(tr);
        i = i + 1;
        iterate(i, callback);
    } else {
        callback();
    }
}

iterate(0, function() {
    alert("Draw Complete");
});

2 个答案:

答案 0 :(得分:0)

通过每次迭代总是更新DOM,这种递归的性能会变得非常糟糕。如果你想更快地减少重绘量。

您想要附加tbody而不是table元素。

答案 1 :(得分:0)

抱歉,在这里看不到递归的任何原因。普通循环应该可以正常工作:

for (var i = 0; i < array.length; i++) {
    tr = buildTableRow(object[array[i]]);
    tr.attr({
        "id": 'theObjectIs' + array[i];
    });
    table.append(tr);
}
alert("Draw Complete");

对于记录,您可以检查原始代码中的l的值(警报?),最有可能等于1,这就是函数只执行一次的原因。

编辑:代码可能会在循环/递归内的任何行中出错,从而解释问题。使用此类代码检测此类问题:

if (i < l) {
    try {
        tr = buildTableRow(object[array[i]]);
        tr.attr({
            "id": 'theObjectIs' + array[i]
        });
        table.append(tr);
    } catch (ex) {
        alert("error occurred at index " + i);
    }
    i = i + 1;
    iterate(i, callback);
} else {
    callback();
}