我有一个随机生成的元素ID列表。元素已经存在,我没有创建或删除它们。我只需要通过他们的id选择随机的:
剥离了HTML:
<div id="circle1"></div>
<div id="circle2"></div>
<button id="start">Start<button>
一些简单的JS / jQuery:
var circles = [];
function getRandomCircle() {
return "circle" + Math.floor((Math.random() * 3) + 1);
}
function flashCircles() {
for (var i = 0; i < circles.length; i++) {
setTimeout(function() {
$("#" + circles[i]).fadeTo("slow", 1, function() {
$("#" + circles[i]).fadeTo("slow", 0.5, function() {});
});
}, i * 1000);
}
}
$("#start").on("click", function() {
circles.push(getRandomCircle());
circles.push(getRandomCircle());
circles.push(getRandomCircle());
flashCircles();
});
#circle元素未被选中,因此不会淡入淡出。我到达setTimeout()
调用,我没有进入初始选择器的回调。 circles.push(getRandomCircle())
调用按预期工作。如果我删除它们并初始化圆形数组,则没有任何变化。我不认为这是数组符号,因为如果我在setTimeout()
之后运行以下内容并且在循环内,则按预期选择元素:
if ($("#" + circles[i]).length) {
console.log("selected")
} else {
console.log("not selected")
}
唯一有效的方法是对要调用的id进行硬编码:
$("#"+"circle1").doStuff();
我最初有这个工作。 getRandomCircle()
包含填充数组的for循环。没有其他任何改变。
这里发生了什么?数组表示法以前工作过,它在检查某些内容是否被选中时起作用,但它在setTimeout()
内不起作用,尽管它之前有效。所有代码都包含在$("document").ready()
调用中。