2010-10-12 61 views
0

我有一個奇怪的隨機問題。這是我有問題的代碼的一個示例。它的目的是在ul/li元素列表上創建一個jQuery jCarousel控件。但是我需要裏面的元素是垂直居中的,所以一旦他們包含的圖片被加載,我就爲每個元素計算一個填充頂部。遇到jQuery.load和圖片的遞歸太多

<script type="text/javascript"> 
jQuery(document).ready(function() { 
    jQuery("#caroussel-cards").jcarousel({ "wrap": 'both', "animation": 800, "scroll": 4, "auto": 6, "easing": 'easeInOutQuint' }); 
    console.log(jQuery("#caroussel .visual img").length); // Always returns 11 
    jQuery("#caroussel .visual img").load(function (event) { 
     var img = jQuery(this); 
     console.log(img.attr('src')); 
     img.css('paddingTop', (156 - img.height())/2); // 156 is carousel's height 
    }); 
}); 
</script> 

<div id="caroussel"> 
    <ul id="caroussel-cards" class="jcarousel-skin-cards"> 
     <!-- Actually there are 11 li elements --> 
     <li> 
      <div class="visual"> 
       <a href="#"><img src="/Content/img/check.jpg" border="0" alt="" /></a> 
       <a href="#" class="bt_command"></a> 
      </div> 
     </li> 
    </ul> 
</div> 

錯誤是很隨機的,而是去如下:

  • 有了這個代碼,只有這樣的代碼:在Firefox 3.6中,只有一些照片將經過負載(),完全隨機;在IE8上,根本沒有圖片會通過load(),甚至按下Ctrl + R。

  • IE問題使我使用this plugin,根據jQuery文檔,當瀏覽器緩存和load()事件之間存在干擾時,它可以提供幫助。結果是,現在,它有時會起作用,有時(完全隨機的,Ctrl + R或不),我在Firefox上有「太多遞歸」消息,在IE上出現「內存不足」異常。我的代碼中的第二個console.log顯示一些圖片被多次加載。

不管發生什麼事,在的jCarousel被正確加載,和第一的console.log返回,有11張圖片的旋轉木馬。

通常由於無限循環而發生「太多遞歸」消息,但在代碼中看不到一個消息。我無能爲力。

回答

0

您使用的是最新版本的jCarousel嗎?當我嘗試你的代碼時,我從jCarousel得到一個異常,聲明因爲沒有爲元素設置寬度和高度,所以會發生無限循環,如果在你的版本中未處理的話會解釋你的「太多的遞歸」和內存不足的錯誤。

嘗試通過添加選項

itemFallbackDimension: 10 

您的jCarousel選項對象,看看情況有所改善。 (這裏的值10是任意的,使用任何你喜歡的東西)

+0

我沒有把我的CSS文件爲了簡單,但我的元素確實有一個寬度和高度(實際上是183px x 140px)。 – 2010-10-12 16:40:52

+0

您是否嘗試了默認選項?我發現手動將CSS寬度和高度添加到div和img標記沒有解決問題,但添加了默認值。 – Sorpigal 2010-10-12 16:47:31