2012-06-11 38 views
0

我在我的一個頁面上實現圖像旋轉,但是我想重新使用另外兩頁上的代碼。我還希望每個頁面以不同的順序將圖像旋轉到其他頁面。我認爲這是通過聲明不同的數組並用唯一的ID來調用它們來實現的。JavaScript不工作在第二頁

的代碼如下

var ImageArr1 = new Array("/assets/function.jpg","assets/takeaway.jpg","/assets /delivery.jpg"); 
var ImageHolder1 = document.getElementById('Rotating1'); 


var ImageArr2 = new Array("/assets/takeaway.jpg","/assets/function.jpg","/assets/delivery.jpg"); 
var ImageHolder2 = document.getElementById('Rotating2'); 

    function RotateImages(whichHolder,Start) 
    { 
    var a = eval("ImageArr"+whichHolder); 
    var b = eval("ImageHolder"+whichHolder); 
    if(Start>=a.length) 
    Start=0; 
    b.src = a[Start]; 
    window.setTimeout("RotateImages("+whichHolder+","+(Start+1)+")",3000); 
    } 

    RotateImages(1,0); 
    RotateImages(2,0); 

而我的HTML如下: - 第1頁

<img src="/assets/function.jpg" name="Rotating" id="Rotating1" width="260" height="180" alt=""> 

第2頁

<img src="/assets/takeaway.jpg" name="Rotating" id="Rotating2" width="260" height="180" alt=""> 

我慢慢學習Javascript支持,但是這已經讓我難倒

任何幫助表示讚賞

+0

忘記'eval'儘可能快! - >'window [「ImageArr」+ whichHolder]'是一樣的。也傳遞'setTimeout'函數而不是字符串作爲第一個參數 - >'setTimeout(function(){RotateImages(whichHolder,(Start + 1));},3000)' – Andreas

回答

1

您遇到的問題其實是一個錯誤。通過調用b.src,你聲明b已被定義,但你的ImageHolder可能不在那裏。尤其是通過調用RotateImage(第一頁上的RotateImage(2 ...)或RotateImage(第二頁上的第一個)...

您可能會嘗試的第一件事是從您的大腦中刪除eval。您可以簡單地使用window [「ImageArr」+ whichHolder], 。這是好得多

接下來,

if(b) { 
    b.src = a[Start]; 
    window.setTimeout("RotateImages("+whichHolder+", "+(Start+1)+")", 3000); 
} 

下一頁取代你的函數(最後兩行)結束時,你可以學會叫的setTimeout與函數而不是字符串:

window.setTimeout(function() { 
    RotateImages(whichHolder, Start+1); 
}, 3000); 

最後,它是更多的代碼約定,經典變量和函數沒有大寫的第一個字母。所以它可能是rotateImages並開始。

+0

感謝您的建議,但我仍然無法讓它與您的建議 – Richlewis

+0

在這裏,你可以找到一個工作的例子http://jsfiddle.net/dxGwy/7/ – korko

+1

大微笑四處。工作像一種享受。也感謝上面提供的評論,將幫助我學習JavaScript一點清潔 – Richlewis