2010-04-21 36 views
2

今天我正在認真地掙扎。如何將一個變量傳遞給jQuery timeout

我需要傳遞的變量,或甚至更好的對象,到超時本身(例如):

$('.x').each(function() 
{ 
    setTimeout(function() 
    { 
    alert ($(this).attr('id')) 
    },10000); 
}); 

顯然發生的事情是在超時不具有參照原$(this)

幫助?

+0

感謝標記爲格式 – Bob 2010-04-21 14:36:49

回答

5

this是上下文敏感的(並且是不同的a_jQuery_object.each比在window.setTimeout,但它的參考可以被複制到一個不同的變量,是不是上下文敏感的,這是常規使用that用於此目的。

$('.x').each(function() { 
    var that = this; 
    setTimeout(function() { 
     alert ($(that).attr('id')) 
    },10000); 
}); 
+0

工作。我不明白爲什麼。當然,setTimeout也超出了父函數的範圍,所以它會丟失var? – Bob 2010-04-21 14:39:27

+0

該函數創建在與'that'相同的範圍內被創建,所以它保持訪問這些變量。 – Quentin 2010-04-21 14:40:59

+0

明白了。非常感謝你的幫助r的幫助。我錯過了它在創建而不是執行的時刻。 – Bob 2010-04-21 14:43:02