4

こんにちは、div を「非表示」にして、非表示アニメーションが終了したら「削除」しようとしています。どちらかを機能させることができるようですが、両方を機能させることはできません。setTimeout を使用してみましたが、これは div が非表示になるだけで、実際には削除されません。

コードは次のとおりです。

$(this).parents("div:eq(0)").hide("fast");
setTimeout(function () { $(this).parents("div:eq(0)").remove();}, 1000);

setTimeout なしで削除すると、div は削除されますが、非表示アニメーションは表示されません。

どんな助けでも大歓迎です!

4

4 に答える 4

6

それはスコーピングの問題だと思います。関数が実行されると、関数内setTimeout()のコンテキストはthis、関数を宣言したときとは異なります。

これを試して:

var self = $(this).parents("div:eq(0)");
self.hide("fast");
setTimeout(function () { self.remove();}, 1000);
于 2010-01-24T19:29:35.113 に答える
2

次のようなことを試しましたか:

$(this).parents("div:eq(0)").hide("fast", function(){
    var div = this;
    setTimeout(function () { $(div).remove(); }, 1000);
});

非表示コードが終了すると、settimeout コードが実行されます。

コールバックの詳細: http://api.jquery.com/hide/

-- のスコープに対して修正this

于 2010-01-24T19:23:11.330 に答える
2

皆さん、すばらしい (そして速い!) 回答をありがとうございます! 感謝します。

私はうまくいくと思われるそれらのいくつかの組み合わせを使用することになりました。

$(this).closest("div").hide("fast", function() {
    $(this).remove();
});

@ジョン:ありがとう!私はこれにかなり慣れていないので、コールバックを忘れ続けています (手を額に叩きつけます!)

@redsqure: 効率のヒントをありがとう! まだ学習中...

@zombat:はい、良いキャッチです-その時点で親の親を削除していたので、コールバックで親への呼び出しを削除することで上記を回避しました。;)

@Tim: .delay(1000) は有望に見えましたが、動作させることができませんでした(?) (はい、私は 1.4 を使用しています) ;)

ありがとうございます!:)

于 2010-01-24T19:41:45.810 に答える
0

.hide は、使用できる完全なコールバックを受け取ります。また、.closest は、現在使用している親よりも効率的です。

var $div = $(this).closest('div');

$div.hide("fast", function(){
    $div.remove();
});

setTimeout を使用するには、次のようにします。

var $div = $(this).closest('div');

$div.hide("fast");

window.setTimeout(function () { 
      $div.remove();
}, 1000);
于 2010-01-24T19:26:52.063 に答える