У меня странная, случайная проблема. Вот пример моего проблемного кода. Его целью является создание элемента управления jQuery jCarousel для списка элементов ul / li. Но мне нужно, чтобы элементы внутри были вертикально отцентрированы, поэтому я рассчитываю верхний отступ для каждого из них, как только загруженное изображение будет загружено.
<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 только некоторые картинки будут проходить через load () совершенно случайно; в IE8 никакая картинка вообще не пройдет через load (), даже нажав Ctrl + R.
Проблема IE привела меня к использованию этого плагина , который, согласно документации jQuery, может помочь при наличии помех между кешем браузера и событием load (). Результатом является то, что сейчас, иногда это работает, а иногда (совершенно случайно, Ctrl + R или нет) у меня есть сообщения «слишком много рекурсии» в Firefox и исключения «Недостаточно памяти» в IE. Второй файл console.log в моем коде показывает, что некоторые изображения загружаются несколько раз.
Что бы ни случилось, jCarousel загружен правильно, и первый файл console.log возвращает, что в карусели 11 изображений.
Обычно сообщение «слишком много рекурсии» происходит из-за бесконечного цикла, но я не вижу его в своем коде. Я невежественен.