2011-08-24 6 views
11

jQueryエフェクト関数に渡されるコールバック関数が実行中にエラーがある場合、繰り返し実行する少なくとも1つのケースを観察しているようです。例えば jQueryコールバックは明らかに失敗しても繰り返されますか?

、次のコードをフィーチャーし、 this JS Fiddleを参照してください。

$('#awesome').fadeOut(400,function() { 
    log('fading out...'); 
    dieInAFire(); 
}); 

logはdiv要素にそれに渡されたどんな追加...しかしdieInAFireは存在しません。しかし、単に実行を停止するのではなく、ログ区画の「フェードアウト...」という外観が増えていることからもわかるように、無名関数は繰り返し呼び出されているようです。

これは予期された動作ですか?もしそうなら、なぜですか?

+0

驚くべき発見... :-)私にはそれが全く期待できないですし、それを置き換えることができます。 – HBublitz

+1

jQueryのバグのようです。 – Emil

+0

非常に奇妙なことに、アニメーションと関係があるようです。 AJAXコールバックにはこの問題はなく、アニメーションがない場合でもこのコールバックは問題ありません。要素が既に 'display:none; 'スタイルを持っていれば、IEはコールバックがちょうど1回呼び出されます。同じ問題がfadeIn()でも発生します – Paulpro

答えて

4

これは既知のバグです。 See the report here.

+0

+1 Grrrrは同じ回答を返そうとしていました:) – Krule

+0

うわー、それも古いです。 –

+1

これは修正されました:) – Paulpro

1

patrick dwが投稿したバグについてコメントしました。

行を変更する:

options.complete.call(elem); 

へ:

setTimeout(function(){ 
    options.complete.call(elem); 
}, 0); 

は、コールバックを非同期に実行し、それがエラーをスローした場合、それはもはや実行を停止しません場合にします。 IMO例外を抑制しないので、try catchを使用するよりも優れています。

あなたが縮小さバージョンを編集したい、とあなたは、最新のjQueryを使用している場合、あなたはe.complete.call(d)を検索しsetTimeout(function(){e.complete.call(d)},0)

関連する問題