我在由嵌套 div 组成的网页上有一个简单的旋转元素,位于 ASP.NET UserControl 内。当只有一个控件存在时工作正常。但是,控件的多个实例相互干扰。该脚本在代码隐藏中注册,没有被包含两次。这是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);
}
});
如果所有控件具有相同数量的元素,则此代码将正常工作......但是当它们没有时,事情就会变得不稳定。检查我们是否应该重新开始旋转不起作用,因为 nextDiv 实际上是由多个元素组成的,因为页面上有多个 UserControl 实例。
这里最好的策略是什么?修改代码隐藏中的 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>