0

私のメソッドはdivボックスをフェードアウトし、メソッドを呼び出すコールバックを持っています...次のようになります。

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

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

これが実行されると(ボタンのonClick)、resetWindowにアラートがあり、実行回数を確認します。

それは永遠に実行されるようですが、私はそこに座って警告ウィンドウを閉じて見つけることができませんでした。

私はいくつかの調査を行い、Jqueryのドキュメントを読みました:

callback(オプション)関数
アニメーションが完了するたびに実行される関数で、に対してアニメーション化された要素ごとに1回実行されます。

ですから、私は1 divをフェードアウトしているだけなのに、divが持つ子要素ごとに1 .. +1としてカウントされるのだろうかと思っていました。

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

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

編集:それはnumWindowsOpen--;私が関数の前にnumWindowsOpenを定義していなかった行だったので、何らかの理由で呼び出しが複数回発生していました...誰かがこれが発生した理由を説明できますか?

4

2 に答える 2

0

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

function() {
    alert('Test');
    resetWindow(windowIdPrefix);
    numWindowsOpen--;
}
于 2009-08-05T16:02:01.587 に答える