2012-05-10 82 views
0

我試圖將元素推入數組X,同時迭代數組Y。在某個時候,在將新元素推入數組X時,瀏覽器控制檯中出現「Unexpected token:」錯誤。在它失敗之前,我能夠正確地推動幾個元素(幾乎每次都在第7個元素左右)。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; 
    } 
} 

你可以從劇本看,我想在8個不同定位的隨機顯示照片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