2014-12-02 72 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>