私は奇妙でランダムな問題を抱えています。これが私の問題のあるコードのサンプルです。その目的は、ul/li 要素のリストに対する jQuery jCarousel コントロールを作成することです。しかし、内部の要素を垂直方向の中央に配置する必要があるため、含まれる画像が読み込まれると、それぞれの要素のパディングトップを計算しています。
<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 では、Ctrl+R を押しても、load() を通過する画像はまったくありません。
IE の問題により、このプラグインを使用するようになりました。これは、jQuery のドキュメントによると、ブラウザーのキャッシュと load() イベントの間に干渉がある場合に役立ちます。その結果、時々それが機能し、時々 (完全にランダムに、Ctrl+R かどうかにかかわらず) Firefox で「再帰が多すぎます」というメッセージが表示され、IE で「メモリ不足」の例外が発生します。私のコードの 2 番目の console.log は、一部の画像が複数回読み込まれていることを示しています。
何が起こっても、jCarousel は適切にロードされ、最初の console.log は、カルーセルに 11 個の画像があることを返します。
通常、「再帰が多すぎる」というメッセージは、無限ループが原因で発生しますが、私のコードには表示されません。私は無知です。