2012-11-24 42 views
-2

我試圖在div中設置一個背景圖像來改變setTimer()每隔一秒鐘或兩秒鐘;我設置它,它是說我有具有定時器功能的匿名函數assisment錯誤

'Invalid left-hand side in assignment' 

不知道我在做什麼,這是錯誤的。有人可以幫忙嗎?

<html><body> 
    <div class="box"> 
    <div id="b1"></div> 
    </div> 
    <input id = 'spin' type="button" value="Spin" onclick='changeIcons()' /> 
    <script> 
    var arr = new Array(); 
    arr[0] = '1.png'; 
    arr[1] = '2.png'; 
    arr[2] = '3.png'; 
    var first = document.getElementById('b1'); 

    function changeIcons(){ 
    for(var spinIcons= 0; spinIcons < 10; spinIcons++){ 
    arr.sort(function() {return 0.5 - Math.random()}); 
    var v1 = setTimeout(function(){first.style.background-image= 'url(arr[0])'}, 1000); 
} 
    } 
</script> 
</body> 
</html> 

這次終於結束了工作,它具有時間問題,我需要做一個FRAMED PLACE持有人就BACKGROUNDIMAGES但它的工作:

 <div class="first"></div> 
    <script> 
    for(var i=0; i<11; i++){ 
     $("div.first").slideUp(300).delay(100).fadeIn(400); 
    } 
    </script> 

感謝TJCROWDER FOR往那兒ME! !

+0

缺少正在傳遞給'setTimeout()'的函數的大括號。 –

+0

在我的實際腳本中,它在那裏......當我重新輸入它時,我只是錯過了它。 – Psyllex

+1

@Verber:爲什麼*** heck ***你會「重新輸入」它?爲了避免浪費人們的時間(包括你自己的時間),複製和粘貼人。 –

回答

3

有兩個問題。

在導致你提到的錯誤是在這裏:

//          here ------v 
var v1 = setTimeout(function(){first.style.background-image= 'url(arr[0])'}, 1000); 

這使得引擎認爲你想分配給一個表達式(background - image),這是對左側無效的結果一個任務的一面。在JavaScript中,屬性名稱中不能有破折號。您可以改用camelCase版本backgroundImage

另外,您總是將背景圖像設置爲字符串'url(arr[0])',而不是將arr[0]的值放入字符串中。您需要調整報價:

所以:

var v1 = setTimeout(function(){first.style.backgroundImage= "url(" + arr[0] + ")"}, 1000); 

其他一些注意事項:

  • 你在一個循環中建立setTimeout,所以你要安排這樣的事情發生10倍。但這10次都會一個接一個地發生,一秒鐘後,他們都會做同樣的事情:將背景圖像設置爲arr[0]那時的。事實上,您之前改變陣列順序10次並沒有什麼區別,因爲函數在您的時間表時沒有收到arr[0]值的副本,它接收到對數組的持久引用,它在運行時使用它。更多:Closures are not complicated

  • 對數組進行排序並使用索引0似乎是一種相當低效的從數組中隨機選取的方法。

+1

也需要更改爲''url('+ arr [0] +')'' –

+0

@NathanWall:或者甚至可能是'url('+ arr.pop()+')''或類似的,否則它只會保留顯示相同的圖像。 –

+0

那不是它。我有和以前一樣的錯誤。我不需要彈出,因爲我有一個循環,並使用 arr.sort(function(){return 0.5-Math.random()}); – Psyllex

相關問題