ASP.NET UserControl 内に、ネストされた div で構成される Web ページに単純な回転要素があります。コントロールが 1 つしか存在しない場合は正常に動作します。ただし、コントロールの複数のインスタンスが互いに干渉しています。スクリプトはコード ビハインドに登録され、2 回含まれることはありません。jQueryコードは次のとおりです。
$(document).ready(function () {
var timer = null;
$("div.divRotator").find("div:first-child").show();
//Wait 5 seconds then call rotate();
timer = setTimeout(rotate, 4000);
function rotate() {
var nextDiv = $("div.divRotator").find("div:visible").next("div");
if (nextDiv.html() == null) { //PROBLEM HERE!!!
nextDiv = $("div.divRotator").find("div:first-child");
//console.log("rotating...");
}
$("div.divRotator").find("div:visible").fadeOut(500, function () { nextDiv.show(); });
timer = setTimeout(rotate, 4000);
}
});
すべてのコントロールが同じ数の要素を持っている場合、このコードは正常に機能します...しかし、そうでない場合、物事は不安定になります。ページに UserControl のインスタンスが複数あるため、nextDiv は実際には複数の要素で構成されているため、ローテーションを再開する必要があるかどうかを確認するチェックは機能しません。
ここで最善の戦略は何ですか?コード ビハインドで div クラス/ID を変更し、各コントロールに個別の JavaScript を与えますか? それは退屈なようで、不要なはずです。どうにかして nextDiv の動作を変更したほうがよいように思えますが、私の jQuery の知識はここで失敗しています...確かにこれに対する簡単な解決策はありますか?
参考までに、レンダリングされたコンテンツは次のようになります。
<div class="divRotator">
<div style="display:none"> Some content </div>
<div style="display:none"> Some more content </div>
<div style="display:none"> you guessed it </div>
</div>
<div class="divRotator">
<div style="display:none"> Uh oh, now we got trouble <div>
</div>