2012-07-30 50 views
1

基本上我有一個函數,通過這...我需要這個函數被執行後1/3秒按鈕被點擊,所以我想做的是:試圖設置超時功能和passvariable - 不起作用

因爲我知道setTimeout(「」,x);與「」 一起工作,但它不起作用。

我試過沒有「」,它不會工作,要麼我想:

setTimeout("somefunction("+this+")", 3000); 

,但仍無法正常工作。這樣做了一個小時的嘗試。

任何幫助將不勝感激。

回答

2

你需要使用一個封閉

var that = this; 
setTimeout(function(){ somefunction(that); }, 3000); 
+0

Epascarello非常感謝..這個工作 – 2012-07-30 19:06:54

1

超時是異步事件,所以上下文丟失。保存它的一種方法是通過立即執行的函數來綁定它。

setTimeout((function(that) { 
    return function() { somefunction(that); }; 
})(this), 3000); 

另一種方法是在@ epascarello的回答顯示的變量中引用外部作用域。

將函數引用傳遞給setTimeoutsetInterval比字符串總是更好,因爲後者被評估,並且評估是邪惡的。

+0

感謝utkanos你們都有大致相同的答案 – 2012-07-30 19:07:15