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、実際の-elementではなく、-objectを#second調べます。

それとは別に、タイムアウトが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 に答える