2012-05-10 11 views
0

配列Xに要素をプッシュしようとしていますが、配列Yを反復しています。ある時点で、新しい要素を配列Xにプッシュしているときに、ブラウザコンソールに「予期しないトークン:」というエラーが表示されます。私はそれが失敗する前にいくつかの要素を適切に押すことができます(ほぼ毎回7番目の要素)。あなたがスクリプトから見ることができるように、私は8つの異なる位置付けでランダムに写真を表示しようとしているarray.push()は奇妙なエラーをスローする

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の要素。

+0

私は、その特定の画像のファイル名などに問題がある可能性が高いと思います。ああ、そのsetTimeoutに文字列の代わりに関数を渡す。 – Christoph

+0

問題は、@antyratが指摘したように、間違った関数がsetTimeout()から渡されたためです。 – jMn

答えて

3

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

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

はい、それが問題でした。どうもありがとう。 :) – jMn

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); 
+1

ありがとう、素敵なヒント:) – jMn