2012-01-10 45 views
3

下面的代碼將無法正常工作。我嘗試了不同的變化&到處搜索,但沒有運氣。jQuery中的setTimeout()問題。每個

i = 1; 
var timer = new Array(); 
jQuery('a').each(function($) { 
    i++; 
    timer[i] = setTimeout(jQuery(this).remove(), i * 5000) 
}) 
+6

*下面的代碼將無法正常工作。*你想做什麼就做什麼?我假設你的問題是你立即調用'jQuery(this).remove()'。 – 2012-01-10 01:15:11

+1

另請注意,傳遞給'each'的第一個參數實際上是所選元素集中DOM元素的索引。這意味着你不必維護一個單獨的計數器。 [文檔中的更多信息](http://api.jquery.com/each/)。 – 2012-01-10 01:43:32

回答

8

裹刪除元素與功能

i = 1; 
var timer = new Array(); 
jQuery('a').each(function($) { 
    i++; 
    var thiz = jQuery(this); 
    timer[i] = setTimeout(function() { thiz.remove(); }, i * 5000); 
}) 
+0

完美,謝謝。 – 2012-01-10 01:27:55

-1

setTimeout接受JavaScript語句不是jQuery(this).remove()返回值:P 見this link

你可以function(){stuff},但不知道,當你希望它jQuery(this)將被處理。

0

嘗試:

<html> 
<body> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> 
<a href="#">a</a> 
<a href="#">a</a> 
<a href="#">a</a> 
<a href="#">a</a> 
<a href="#">a</a> 
<a href="#">a</a> 
<script> 
i = 1; 
var timer = new Array(); 
    jQuery('a').each(function($) { 
    i++; 
    timer[i] = setTimeout(jQuery.proxy(function(){jQuery(this).remove();},this), i * 500); 
}) 
</script> 
</body> 
</html> 
3

菲利克斯已經暗示在評論這個問題,但我會擴大。

timer[i] = setTimeout(jQuery(this).remove(), i * 5000) 

你的問題就在於,你是調用jQuery(this).remove()並在此返回值傳遞給你的setTimeout。假設是你打算在超時過期時運行它。如果是這種情況,您需要將其封裝在一個函數中,以便該函數將被傳遞給setTimeout並在計時器到期時執行。

var $el = jQuery(this); 

timer[i] = setTimeout(function(){ 
    $el.remove() 
}, i * 5000) 
4

的第一個參數setTimeout(或setInterval)需要一個函數的引用(或字符串,但你不希望使用字符串形式)。

不是將函數作爲參數傳遞,而是調用函數並傳遞其結果。如果去掉括號,你會傳遞一個參考作用:

timer[i] = setTimeout(jQuery(this).remove, i * 5000) 

但隨後你就會開始有與this是在功能實際運行時間錯誤的事情煩惱。嘗試是這樣的:

var i = 1, 
    timer = []; 
jQuery('a').each(function($) { 
    i++; 
    var $this = jQuery(this); 
    timer[i] = setTimeout(function() {$this.remove();}, i * 5000) 
}) 

這需要的方式關閉的優勢工作在傳遞給setTimeout匿名函數將在其運行,即使在$this聲明的功能的時間訪問$this變量將在那時完成執行。

請注意,最好聲明[]而不是new Array()

另請注意,您將i初始化爲1,然後在使用它之前對其進行增量,以使您添加到陣列中的第一個元素將爲timer[2]。您可能應該將其初始化爲0,然後在設置每個計時器後遞增。