2012-07-03 215 views
4

我一直在對頭撞擊各種無生命對象。我使用jQuery創建宣傳橫幅旋轉的東西。每2秒(我將來會更改它,僅用於測試它很短),圖像和標題更改。未捕獲TypeError:無法讀取未定義的屬性'0'

這很好,它在它們之間旋轉,當它到達最後一個時,它會回到開始。但是,當我點擊一個,並退回到開始(或我的第一個點擊明確),則它的旁邊試圖轉動它拋出這樣的:

Uncaught TypeError: Cannot read property '0' of undefined /ftwc/:178 
changeImage 
rotate 

在我的兩個功能。我無法理解爲什麼!

這裏是腳本:

changeImage = function(num) {   
    $(".currentpromoimage").before('<div class="promoimage newpromoimage" style="background: url(\''+images[num][0]+'\') no-repeat; z-index: 1;"><div class="caption" style="color: #'+images[num][2]+'">'+images[num][1]+'</div></div>'); 

    $(".currentpromoimage").fadeOut(700,function(){ 
     $(".newpromoimage").addClass("currentpromoimage"); 
     $(".newpromoimage").removeClass("newpromoimage"); 
     $(this).remove(); 
    }); 

    $(".newpromoimage").fadeIn(700); 

    $("#promoselect").children().children().css('background', '#303030'); 

    $("#ps_"+num).css('background', '#000000'); 

    currentImage = num; 

}; 

rotate = function() { 

    var imageLength = images.length-1; 

    if (currentImage == imageLength) { 
     changeImage("0"); 
    } else { 
     var nextImage = currentImage+1; 
     /*alert("nextImage:"+nextImage);*/ 
     changeImage(nextImage); 
    } 

}; 

var selectors = ""; 

var preloads = ''; 

for(var i=0;i<images.length;i++) { 
    preloads += '<img src="'+images[i][0]+'" alt="preloaded" class="preload">'; 

    selectors += "<li id=\"ps_"+i+"\"></li>"; 
} 

$("body").prepend(preloads); 

$("#grass").after('<div id="promo"><div id="promoselect"><ul></ul></div><div class="promoimage currentpromoimage" style="background: url(\''+images[0][0]+'\') no-repeat; z-index: 1;"><div class="caption" style="color: #'+images[0][2]+'">'+images[0][1]+'</div></div></div>'); 

    var currentImage = 0; 

    $("#promoselect").children().append(selectors); 

    $("#ps_0").css('background', '#000000'); 

    $("#promoselect") 
     .children() 
     .children() 
     .click(function() { 
      var selector = $(this).attr("id").split("_"); 

      clearInterval(autoimage); 

      changeImage(selector[1]); 

      autoimage = setInterval(rotate,2000); 
    }); 

    autoimage = setInterval(rotate,2000); 

這被稱爲所有jQuery的文檔準備函數內部,和圖像是使用json_encode從PHP編碼的陣列。我知道現在很亂,但我不明白爲什麼這些功能出現未定義。

謝謝!

+4

你能設置一個顯示錯誤的工作JS小提琴嗎? – Utkanos

回答

0

您正在使用image變量很多,但不要在任何地方(或錯誤)定義它。在第一行右邊,images[num]將評估爲undefined,在訪問images[num][0]時拋出錯誤。

+0

我說這是一個用PHP編碼的數組,我也說圖像SUCCESSFULLY在它們之間自己改變,所以圖像數組沒有問題。 (它不包含在粘貼的代碼中,它只是一個圖像和字幕數組的數組) – MarcusJohnson

+0

那麼你會得到那個錯誤? 「num」將是你的數組的一個不存在的索引。 – Bergi

+0

num是傳遞給函數並在數組中使用的數字。在它不工作的情況下,該數字爲0.數組有兩個索引0,1和2(可從中選擇3個圖像)。只有當您選擇索引0時纔會發生。它無法旋轉。 – MarcusJohnson

相關問題