2014-09-27 84 views
0

我在頁面上有一些元素,我想通過JQuery擴展函數調用它們的函數。我有這個功能declarement:setTimeout立即運行

(function ($) { 
     $.fn.enable = function (delay) { 
      console.log(delay); //logs 3000 
      setTimeout(function (elem) { 
       console.log(elem); 
       elem.css("opacity", "1"); 
      }(this), delay); 
      return this; 
     }; 
    })(jQuery); 

如你所知,這聲明對於JQuery的對象enable功能。現在,當我打電話是這樣的:

$("#start").enable(3000); 

功能enable運行,但裏面的代碼function (elem)...立即運行,而不是在運行一段時間後!

如何和爲什麼?

+1

如果你用'(this)'結束了你的匿名函數,那麼你傳入的是返回值,而不是函數。 – sje397 2014-09-27 09:07:41

回答

3

這是因爲您正在調用函數「function(elem)」,而不是將其作爲參數提供。試試這個

(function ($) { 
     $.fn.enable = function (delay) { 
      console.log(delay); //logs 3000 
      var elem = this; 
      setTimeout(function() { 
       console.log(elem); 
       elem.css("opacity", "1"); 
      }, delay); //you should not call a function here 
      return this; 
     }; 
    })(jQuery);