基本上我有一個函數,通過這...我需要這個函數被執行後1/3秒按鈕被點擊,所以我想做的是:試圖設置超時功能和passvariable - 不起作用
因爲我知道setTimeout(「」,x);與「」 一起工作,但它不起作用。
我試過沒有「」,它不會工作,要麼我想:
setTimeout("somefunction("+this+")", 3000);
,但仍無法正常工作。這樣做了一個小時的嘗試。
任何幫助將不勝感激。
基本上我有一個函數,通過這...我需要這個函數被執行後1/3秒按鈕被點擊,所以我想做的是:試圖設置超時功能和passvariable - 不起作用
因爲我知道setTimeout(「」,x);與「」 一起工作,但它不起作用。
我試過沒有「」,它不會工作,要麼我想:
setTimeout("somefunction("+this+")", 3000);
,但仍無法正常工作。這樣做了一個小時的嘗試。
任何幫助將不勝感激。
你需要使用一個封閉
var that = this;
setTimeout(function(){ somefunction(that); }, 3000);
超時是異步事件,所以上下文丟失。保存它的一種方法是通過立即執行的函數來綁定它。
setTimeout((function(that) {
return function() { somefunction(that); };
})(this), 3000);
另一種方法是在@ epascarello的回答顯示的變量中引用外部作用域。
將函數引用傳遞給setTimeout
和setInterval
比字符串總是更好,因爲後者被評估,並且評估是邪惡的。
感謝utkanos你們都有大致相同的答案 – 2012-07-30 19:07:15
Epascarello非常感謝..這個工作 – 2012-07-30 19:06:54