2012-10-14 34 views
1

我試圖修復這個背景推子, 它的工作原理,但它返回一些值爲未定義,我無法弄清楚, 任何幫助將不勝感激。運行初始數組後,Jquery數組返回undefined

php只是讀取一個目錄,並獲取圖像文件路徑,然後創建與其中的文本隱藏跨度。

 $(document).ready(function() { 
     /* DocReady */ 
     var counter = 0; 
     var faderImgs = new Array(); 
     $('span.entry').each(function() { 
      var value = 'images/bg/' + $(this).text(); 
      faderImgs.push(value); 
      $('<img />').attr('src', value).appendTo(this).css('display', 'none'); 
     }) 

     /* DocReady */ 

     var intId = setInterval(faderBg, 8000); 
     var numItems = $('span.entry').length; 

     function faderBg() { 

      $('.background-fader').animate({ 
      'opacity': '0' 
      }, 2000, function() { 
      $('.background-fader').css('background-image', 'url(' + faderImgs[counter] + ')') 
      $('.background-fader').animate({ 
       'opacity': '1' 
      }, 2000) 

      }) 
      counter++; 
      if (counter > numItems) { 
      var counter = 0; 
      } 
     } 

     }); 

----------------------------編輯-------------- -------------------------

非常感謝幫助球員, 現在再次工作。

回答

2

您的計數器溢出陣列的末尾。當它是等於到「numItems」,而不是當它更大時,您想將其設置回零; JavaScript數組從零開始,所以最大的索引是numItems - 1

 counter++; 
     if (counter >= numItems) { // >=, not > 
     counter = 0; 
     } 

另外,當您將「計數器」設置回零時,您不需要var。您應該使用.prop()而不是.attr()來設置您創建的那些<img>元素的「src」屬性。 (我不確定爲什麼你甚至不打算創建這些內容,除非可能是將圖像預提取到瀏覽器緩存中。如果是這樣,則不需要在DOM —上附加<img>元素,只需創建一個Image實例並設置它的「源」屬性。)

編輯 — @charlietfl正確地指出,雜散var會導致嚴重的問題給你,因爲這將導致有一個本地「櫃檯」,在內部函數變量。事實上,如果它存在於你的真實代碼中,我無法想象它是如何工作的,因爲「計數器」總是undefined(或者在後增量後我猜測是NaN)。

+1

強調不需要'var'!由於函數內的範圍,它創建了一個完全不同的變量 – charlietfl