2009-08-05 10 views
0

私の方法は次のように...のdivボックスをフェードアウトしてメソッドを呼び出すコールバックを持っていますJquery fadeOutは何度もコールバックを実行しますが、なぜこれを防止するのですか?

function closeWindow(windowIdPrefix, speed) { 
    $("#" + windowIdPrefix + "_ViewPanel").fadeOut(speed, 
     function() { 
      resetWindow(windowIdPrefix); 
      numWindowsOpen--; 
     } 
    ); 
} 

function resetWindow(windowIdPrefix) { 
    alert("resetting window"); 
} 

この実行(ボタンのonClickのは)私は何回参照するにはresetWindowでアラートを持っている場合実行します。

これは永遠に実行されているようですが、私はアラートウィンドウを閉じるまでに十分に長く座っていません。

は、私はいくつかの研究を行なったし、jQueryのドキュメントを読み込む:

コールバック(オプション)機能
アニメーションが完了するたびに実行される機能を、に対して、アニメーションの各要素に対して1回実行されます。

私は1 divをフェードアウトしているにもかかわらず、それは1 ... に1を加算しますか?

内部要素が外側divでフェードアウトされているため、技術的にアニメーション化されていますが、Firebugでjavascriptを見ると、フェードアウトしている外側divのみが不透明/表示を変更します。

これが起きた場合、コールバックが1回だけ実行されるようにするにはどうすればよいですか?

編集:それは私が呼び出しを複数回起こる作っていたいくつかの理由のためになるよう機能する前にnumWindowsOpenを定義していなかったラインnumWindowsOpen--;だったこれが起こった理由...誰も説明できますか?

+0

resetWindowのコードも投稿できますか? – Powerlord

+0

これは単なる警告ですが、とにかく追加しました。 – Matt

+0

console.log($( "#" + windowIdPrefix + "_ViewPanel")。 fadeOutの前に何を得るのですか? (または、firebugがインストールされていない場合はconsole.logの代わりに警告を行います) – jammus

答えて

0

問題は、それが良いリマインダーは、あなたがより複雑tihngsに行く前に、そのような単純なものを探すことを確認するために...そこに減らされた前numWindowsOpenが宣言されていなかったということでした。

0

コールバックは、セレクタに一致する各要素に対して1回のみ呼び出される必要があります。コールバックにアラートメッセージを直接入力すると、複数のアラートが表示されますか?

function() { 
    alert('Test'); 
    resetWindow(windowIdPrefix); 
    numWindowsOpen--; 
} 
+0

警告( 'テスト')で追加する。テスト警告を1回(fadeOutがそこにあるかどうかにかかわらず)行います。あなたが書いたもの(fadeOutなし)から、resetWindow関数は一度だけ実行されます。 resetWindowが複数回実行されるfadeOutがそこにあるときだけです – Matt

関連する問題