0

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つの異なる位置にある要素で写真をランダムに表示しようとしています。

4

3 に答える 3

3

問題はsetTimeout関数にあるようです。連結の代わりに無名関数を使用して、その関数に引数を渡してみてください。

setTimeout(function() { getPosition(img) }, 1);
于 2012-05-10T14:22:46.180 に答える
2

これは壊れます:

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

それが実際に書いているように:

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

そしてそれを評価しようとします(を使用してeval)。

問題は、JSimg_path.jpgが変数と見なすことです。

修理:

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

ただし、文字列を評価するのは適切ではないか、高速ではないため、この方法で実行しないでください。

代わりに無名関数をsetTimeoutに送信します:

REALFIX:

setTimeout(function() {
    getPosition(img);
}, 1);
于 2012-05-10T14:27:59.580 に答える
1

文字列引数を使用してsetTimeoutを呼び出さないでください。 常に関数を使用してください。この場合に文字列を使用すると、img変数が脆弱な場合、このコードがインジェクション攻撃を受けます。

于 2012-05-10T14:31:19.437 に答える