array.push()抛出奇怪的错误

时间:2012-05-10 14:20:03

标签: javascript jquery

我正在尝试在迭代数组X时将元素推送到数组Y。在某些时候,在将新元素推入数组X时,我在浏览器控制台中收到“意外的令牌:”错误。我可以在它失败之前正确地推送几个元素(几乎每次都是第7个元素)。

它是递归函数,可能会导致问题......这是代码:

function getPosition(img) {
    var tmpRandPosition = Math.floor(Math.random() * (9));

    if($.inArray(galleryPositions[tmpRandPosition], populatedPositions) != -1) {
        setTimeout("getPosition("+img+")",1);
    } else {
        populatedPositions.push(galleryPositions[tmpRandPosition]);

        return true;
    }
}

从脚本中可以看出,我正试图在HTML中的8个不同位置的元素中随机显示照片。

3 个答案:

答案 0 :(得分:3)

似乎问题出在setTimeout函数中。尝试使用匿名函数而不是连接将参数传递给该函数:

setTimeout(function() { getPosition(img) }, 1);

答案 1 :(得分:2)

这会破坏:

setTimeout("getPosition("+img+")",1);

实际写道:

setTimeout("getPosition(img_path.jpg)",1);

并尝试对其进行评估(使用eval)。

问题在于JS将img_path.jpg视为变量。

修正:

setTimeout("getPosition('"+img+"')",1);

但是从来没有这样做,因为评估字符串不好或不快。

向setTimeout发送匿名函数:

<强> REALFIX:

setTimeout(function() {
    getPosition(img);
}, 1);

答案 2 :(得分:1)

Don't call setTimeout with a string argument.始终使用功能。在这种情况下使用字符串如果img变量易受攻击,则将此代码置于注入攻击中。