setTimeout立即运行

时间:2014-09-27 09:03:42

标签: javascript jquery web

我的页面上有一些元素,我想通过JQuery扩展函数调用它们的函数。我有这个函数声明:

(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 个答案:

答案 0 :(得分: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);