我想在setTimeout函數中使用jQuery語句,但是 我不明白它的作用。我嘗試了很多變體,像這樣的(我 使用「這個」,因爲setTimeout的是各個功能的內部, 選擇器被高速緩存/存儲在對象,因此,$選擇器):setTimeout函數中的變量(jQuery)
setTimeout("" + this.$selector + ".val('" + this.savVal + "')", 1);
我該如何寫這個?
謝謝!
我想在setTimeout函數中使用jQuery語句,但是 我不明白它的作用。我嘗試了很多變體,像這樣的(我 使用「這個」,因爲setTimeout的是各個功能的內部, 選擇器被高速緩存/存儲在對象,因此,$選擇器):setTimeout函數中的變量(jQuery)
setTimeout("" + this.$selector + ".val('" + this.savVal + "')", 1);
我該如何寫這個?
謝謝!
如果您嘗試使用的變量是在循環的每個步驟中定義的,那麼您可以這樣做。
var myObj = {
$selector: myConfigObj.$myCachedSelector
}
$.each([ myObj, mySecondObj, myThirdObj ], function(n, $selector) {
setTimeout(function() {
$selector.val(saveVal);
}, 1);
});
Marco,「myConfigObj。$ myCachedSelector」似乎是問題所在。它返回「未定義」。我用一個簡單的字符串取代它,它會被正確地返回... – north 2009-11-04 13:50:31
當你需要調用的setTimeout使用這種結構時保留當前this
項: -
setTimeout((function(self) {
return function() { $selector.val(self.savVal) };
})(this), 1);
這就造成從外部函數執行上下文關閉。外部函數返回一個內部函數,該函數將訪問self
參數。它的內部函數在超時發生時被調用,但值self
將保持原始值this
的值。
優雅,如果有點神祕的人不熟悉封閉。感覺愚蠢的是,當我意識到IE沒有傳遞參數時,這並不是第一個想到的事情。我懇求「.NET Developer」作爲我的藉口。那是一件事,對吧? – 2013-03-29 23:38:09
感謝您的回答。
我現在在setTimeout裏面使用了一個函數。但是我發現真正的問題在於:在每個函數中,我嘗試訪問指向配置對象內的屬性的對象屬性,但結果(例如對於這個。選擇器)是「未定義的」 。
var myObj = {
$selector: myConfigObj.$myCachedSelector
}
$.each([ myObj, mySecondObj, myThirdObj ], function() {
//code
});
不知道是什麼問題。兩個對象都在同一個函數/作用域中。
AnthonyWJones提供了一個很好的答案,但還有一個類似的,它稍微容易寫和讀。您只需將「this」的值存儲在局部變量中即可。
var storedThis = this;
setTimeout(function() { $selector.val(storedThis.savVal); }, 1);
'setTimeout()'和'setInterval()'中的字符串已過時。應該使用函數來代替。 – 2009-11-04 13:04:09