0

我需要一个等待功能,从以下开始:

var delay = (function() {
    return function(callback, ms) {
        setTimeout(callback, ms || 1000);
    };
})();

delay(function() {
    $('#foo').animate({
        height: 180
    }, 1000);
});

然后移植到jQuery:

jQuery.fn.wait = function(callback, seconds) {
    return this.each(function() {
        return setTimeout(callback, seconds || 1000);
    });
};

$('#second').wait(function() {
    $('#second').addClass('foo'); // works well
});​

最终陷入混乱:

$('#second').wait(function() {
    $(this).addClass('foo'); // `this` will not work here
});​

...我上次实例化的问题在哪里,或者我该如何解决?this在这里看的是window-object,而不是实际的#second-element...

除此之外,如果超时为0,是否可以让“链”走得更远?因此,如果我们有以下场景,则只有在计时器结束时才会添加该类:

$('#second').wait().addClass('foo');
4

2 回答 2

0

这与链接无关。链接意味着在方法的返回值
上调用额外的 jQuery 方法。( )。 您的方法已经支持链接,因为它返回(通过本身是可链接的)。$(...).wait(...).somethingElse()
thisthis.each()

您正在询问如何使用特定this值调用回调:

var self = this;
callback.call(self);
于 2012-12-01T23:17:03.553 回答
0

没有给你你想要的元素的原因this是因为你试图在一个你没有设置上下文的函数中使用它,试试

jQuery.fn.wait = function(callback, seconds) {
    return this.each(function() {
        var self = this
        return setTimeout(function(){
                   callback.call(self);
               }, seconds || 1000);
    });
};
于 2012-12-01T23:25:25.683 回答