2010-10-12 2 views
0

У меня странная случайная проблема. Вот пример моего проблемного кода. Цель состоит в том, чтобы создать элемент jQuery jCarousel над списком элементов ul/li. Но мне нужно, чтобы элементы внутри были вертикально центрированы, поэтому я вычисляю верхнюю часть для каждого из них, когда загружается изображение, которое они содержат.Слишком много рекурсии с 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 изображение вообще не пройдет через нагрузку(), даже нажав Ctrl + R.

  • Проблема IE привела меня к использованию this plugin, который, согласно документации jQuery, может помочь при возникновении помех между кешем браузера и событием load(). Результат заключается в том, что теперь, иногда это работает, а иногда (полностью случайным образом, Ctrl + R или нет), у меня есть сообщения «слишком много рекурсии» в Firefox и исключения «Out of memory» в IE. Второй console.log в моем коде показывает, что некоторые изображения загружаются несколько раз.

Что бы ни случилось, jCarousel загружается должным образом, и первый console.log возвращает, что есть 11 фотографий в карусели.

Обычно сообщение «слишком много рекурсии» происходит из-за бесконечного цикла, но я не вижу его в своем коде. Я невежественна.

ответ

0

Вы используете последнюю версию jCarousel? Когда я пытаюсь выполнить свой код, я получаю исключение от jCarousel, заявляя, что, поскольку для элементов не задана ширина и высота, возникает бесконечный цикл, который, если необработанный в вашей версии будет объяснять ваши ошибки «слишком много рекурсии» и ошибок в памяти.

Try прохождение, добавив опцию

itemFallbackDimension: 10 

в параметры jCarousel объект и посмотреть, если все улучшения. (Значение 10 здесь произвольное, используйте все, что вам нравится)

+0

Я не ставил свой CSS-файл для простоты, но мои элементы имеют ширину и высоту (на самом деле 183px x 140px). –

+0

Вы все равно попробовали вариант по умолчанию? Я обнаружил, что вручную добавление ширины и высоты CSS в теги div и img не устраняет проблему, но добавление значения по умолчанию. – Sorpigal

Смежные вопросы