使用数组表示法的id选择器

时间:2016-03-16 15:46:14

标签: javascript jquery

我有一个随机生成的元素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()调用中。

0 个答案:

没有答案
相关问题