2011-03-23 31 views
2

如何將$(this)作爲setTimeout函數(method?)中的參數傳遞? 下面是我在做什麼,到目前爲止,這是工作:

var Variables = {}; 
Variables.ResizeTimer = false; 
Variables.$obj = null; 

$('.draggable').resize(function() { 
    if (Variables.ResizeTimer !== false) { 
     clearTimeout(Variables.ResizeTimer); 
    } 
    Variables.$obj = $(this); 
    Variables.ResizeTimer = setTimeout(mySizer, 
     1000 
    ); 
}); 
+1

您的意思是「如何將'$(this)'作爲參數傳遞給'mySizer'?在這個例子中? – lonesomeday 2011-03-23 18:20:48

+0

是的。如果我添加一個參數,setTimeout期望函數在引號內。 – 2011-03-23 18:29:28

回答

6

試試這個:

Variables.$obj = $(this); 
    Variables.ResizeTimer = setTimeout(
     function(){ 
      mySizer(Variables.$obj); 
     }, 
     1000 
    ); 

MPD

要細說了,JavaScript的閱讀起來受封

+2

爲了詳細說明,請閱讀Javascript關閉。 – mpdonadio 2011-03-23 18:23:47

+0

$(this)在這個閉包中不會是他所需要的。這將成爲全球對象===窗口。 – 2011-03-23 18:30:10

+0

@Atanas,修好了,現在好點?大聲笑 – Neal 2011-03-23 18:31:31

5

由於Variables看起來全球,您可以在mySizer例程中使用它。如果你不希望有全局變量,你可以創建一個closure

$('.draggable').resize(function() { 
    if (Variables.ResizeTimer !== false) { 
     clearTimeout(Variables.ResizeTimer); 
    } 
    var $this = $(this); 
    Variables.ResizeTimer = setTimeout(function() { 
     mySizer($this); 
    }, 1000); 
}); 
+0

有點重複,不是嗎? :-p – Neal 2011-03-23 18:28:41

+1

當你發佈時,我正在寫我的回覆。 lols,ZOMG和其他... – 2011-03-23 18:33:06

+0

lol okey dokey^_^ – Neal 2011-03-23 18:34:00

2

因爲沒有人提到它尚未:如果您需要$(this)只能做一些效果相關的,則可能是隻使用逃脫delay函數而不是setTimeout

$('#some_element').click(function() { 

    $(this).delay(2000).fadeIn(); // After 2 seconds, start a fade-in 
} 

另外,也可以以一個函數調用(例如)加入fadeIn。雖然這很有用,但實際上取決於您的特定用例,但如果它適合您的情況,它可能會使事情變得更容易。

希望這會對某人有所幫助...

+1

我沒有聽說過延遲。謝謝。這個問題是從2011年開始的,後來我學會了去綁定變量或將它們放在更大的範圍內。 – 2015-06-22 07:27:04

相關問題