Jquery fadeOutはコールバックを繰り返し実行しますが、これはなぜですか、どうすればこれを防ぐことができますか?
-
22-07-2019 - |
質問
私のメソッドは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しかフェードアウトしていなくても、1としてカウントされます。プラスdivの子要素ごとに1か
技術的には、内側の要素が外側のdivでフェードアウトしているためアニメーション化されていますが、firebugでjavascriptを見ると、フェードアウトしている外側のdivだけが不透明度/表示が変更されます。
これが起こっている場合、コールバックが一度だけ実行されるようにするにはどうすればよいですか?
編集:行 numWindowsOpen-;
関数の前にnumWindowsOpenを定義していなかったため、何らかの理由で呼び出しが複数回発生していました。 。誰がこれが起こったのか説明できますか?
解決 2
問題は、numWindowsOpenがデクリメントされる前に宣言されなかったことです...より複雑なtihngsに進む前に、そのような単純なものを探すことを確認することを忘れないでください。
他のヒント
コールバックは、セレクターに一致した要素ごとに1回だけ呼び出す必要があります。コールバックにアラートメッセージを直接入力すると、複数のアラートが表示されますか?
function() {
alert('Test');
resetWindow(windowIdPrefix);
numWindowsOpen--;
}