2014-12-02 73 views
2

我有几个HTML类的类名增加了如:与更改HTML类的名称为循环变量

<div class="chicken1"> 
    <b></b> 
</div> 
<div class="chicken2"> 
    <b></b> 
</div> 
<div class="chicken3"> 
    <b></b> 
</div> 

我想写一个for循环将通过这些类环名称,将索引添加到每个类名称的末尾,然后在2秒延迟中调用一个函数。

for (var i = 1; i <= 3; i++) { 
    setTimeout(function() { 
     myFunction(".chicken" + i + " b"); 
    }, 2000 * i); 
} 

但是,这是行不通的。

Fiddle

+2

1.哪里是你的myFunction。 2.你传递的是一个字符串而不是一个dom – 2014-12-02 08:19:13

+2

预期的结果是什么? – 2014-12-02 08:21:41

+0

myfunction是代码上面的函数....我没有提供它以简化问题。 – ramr 2014-12-02 08:23:27

回答

1

这个问题实际上是,setTimeout()称为环路内;要做到这一点正确,您必须关闭在循环变量:

for (var i = 1; i <= 6; ++i) { 
    setTimeout((function(i) { 
     return function() { 
      myFunction(".chicken" + i + " i"); 
     }; 
    })(i), i * 2000); 
} 

Demo

它采用的是立即调用函数,传递的i价值;该值将保留,直到setTimeout()被触发。

+0

非常感谢你! – ramr 2014-12-02 08:38:47

0

你使用jQuery?尝试

for (var i = 1; i <= 3; i++) { 
    myFunction($(".chicken" + i + " b")); 
} 
jQuery中

,选择元素,类等,我们需要$("<selector here>");

0

这对我工作得很好:

<html> 
<head> 
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script> 
</head> 
<body> 

<div class="chicken1"> 
    <b></b> 
</div> 
<div class="chicken2"> 
    <b></b> 
</div> 
<div class="chicken3"> 
    <b></b> 
</div> 


<script> 
    $(document).ready(function() { 
     for (var i = 1; i <= 3; i++) { 
      $(".chicken"+i+" b").html("Hey " + i); 
     } 
    }); 
</script> 

</body> 
</html>