2012-04-17 12 views
2

以内に、私はこれが正常に動作していたしました:jQueryの - トグルのコールバック(表示/非表示)イベントハンドラ

$('#RCH'+r).on('click',function(e){$('#RSC'+r).find('.rct,.rcp').toggle();}); 

すべてのトグルの終わりには、しかし、私はrs(1);

関数を呼び出したいです

プラン1:私はトグルでコールバックを入れようとしましたが、それはすべてひよこになります。

$('#RCH'+r).on('click',function(e){ 
    $('#RSC'+r).find('.rct,.rcp').toggle('',function(){rs(1);}); 
}); 

は、上記(eachなど)クラスのすべての出現のために機能rs(1)を呼び出します。 .rcpが表示され、.rctが隠されていた場合は、まったく逆のことが起こります。だから、プラン1はすべてがハンドバスの地獄に行くようにします。

プラン2:を.on機能(以下のように)のトグル後に入れてみました。

$('#RCH'+r).on('click',function(e){$('#RSC'+r).find('.rct,.rcp').toggle();rs(1);}); 

しかし、この方法では、トグルが終了した、などrs機能は、その仕事をしていない前にrs(1)発射します。

トグルが終了したら、どうすればrs(1);を一度発射できますか?

ありがとうございました。

+1

'toggle()'は即座なので、後者はうまくいくはずですか? – Matt

+0

私はそう思っていましたが、それほどそうは思われません。私はチェックします:) [後で]いいえ、それは本当にそうではありません。私はそれが2つのクラスのすべてのインスタンスを循環するので、推測しています。 – Nick

+0

私の間違いは、みんな。それは瞬間的です。しかし、私は最近、rs関数を2つの引数を受け入れるように変更しました。したがって関数は正しく呼び出されていませんでした。千恩赦あなたは正しかった、Matt&Félix:) – Nick

答えて

2

まず、.toggle()は即時ですので、実際には.toggle(/* some duration */)を使用していると仮定します。あなたが実際に.toggle()を使用してですが、何らかの理由で、あなたのコードを失敗作っている遅延はあなたが、存在する場合

$('sel').toggle(/* duration */, function() { 
    // ... 
}); 

:このケースでは、トグルアニメーションが完了した後に呼び出される関数を渡すことができます私はこの作品を願って、これを試してみてください

$('sel').toggle(0, function() { 
    // ... 
}); 
+0

私はトグルを瞬間的にしたい。私がコールバックを追加したとき、私は.toggle( ''、function(){...トグル(0、function(){...を実現しています) – Nick

+0

上記の私の謝辞をご覧ください:) – Nick

0
$.when($('#RCH'+r).on('click',function(e){$('#RSC'+r).find('.rct,.rcp').toggle();})) 
    .done(function(){rs(1);}); 

:これを試みることができます。

+0

これはイベントハンドラが起動されたときではなく、イベントハンドラがアタッチされた後に関数rs(1)を起動します。ハンドラが起動したときにrs(1)を実行したい(つまり、r = 3)。しかし、提案に感謝:) – Nick

関連する問題