【问题标题】:setTimeout runs immediately [duplicate]setTimeout 立即运行[重复]
【发布时间】:2014-09-27 09:03:42
【问题描述】:

我的页面上有一些元素,我想通过 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)... 中的代码立即运行,而不是在一段时间后运行!

如何以及为什么?

【问题讨论】:

  • 如果你以 (this) 结束你的匿名函数,你传递的是它的返回值,而不是函数。

标签: javascript jquery web


【解决方案1】:

那是因为您调用函数“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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2018-02-21
    • 1970-01-01
    • 2013-09-02
    相关资源
    最近更新 更多