私は問題自体が解決されたように見えますが、誰かがこれの理由に光を当てることができることを望んでいます...
以下は、ユーザーフィードバックメッセージを含むdivを削除することを目的とした同じ関数の2つのスナップショットです。オプションのタイムアウトを使用するように設定されています。タイムアウトが指定されている場合は、setTimeout()を使用して自身を呼び出し、divを削除します。
関数の2つのバージョンの唯一の違いは、this.remove()が呼び出される場所です-問題のあるバージョンでは、最初にblackbirdjsを使用してログにメッセージを送信し、次にthis.remove()を呼び出します-これが実行された後、ログはフラッディングされますブラウザがそれらを送り込むことができるのと同じくらい速く「フィードバックdivを削除しています...」の終わりのないログメッセージで。
ただし、作業バージョンでは、順序を逆にすると、すべてが正常に実行され、すべてが正常に実行されます...
私は困惑しています。この場合の順序は些細なことだと思いますが、明らかにそうではありません。なぜこれが起こるのか、誰かが光を当てることができますか?これはjQueryのバグですか、それともブラックバードの問題ですか、それともJavaScriptの奇妙な癖ですか?
注:
confirm()の呼び出しを使用して、さまざまな成功を収めました-falseに戻った場合は、戻るように指示しましたが、これで停止しました-ただし、remove呼び出しの後にreturnを追加しても効果はありませんでした。
興味深いことに、どちらのバージョンもIE8で正常に動作するようです。したがって、これはFirefox / geckoの問題である可能性がありますか?
問題コード:
function clear_feedback(target_container, timeout){
log.debug("timeout: " + timeout);
log.debug("target_container: " + target_container);
if(timeout == undefined){
log.info("removing target...");
$(target_container).children(".update_feedback").slideUp("slow",
function() {
log.info("Removing feedback div...");
this.remove();
}
);
}
else{
log.info("Setting timeout, THEN removing target...");
setTimeout("clear_feedback('" + target_container + "')", timeout);
}
}
作業コード:
function clear_feedback(target_container, timeout){
log.debug("timeout: " + timeout);
log.debug("target_container: " + target_container);
if(timeout == undefined){
log.info("removing target...");
$(target_container).children(".update_feedback").slideUp("slow",
function() {
this.remove();
log.info("Removing feedback div...");
}
);
}
else{
log.info("Setting timeout, THEN removing target...");
setTimeout("clear_feedback('" + target_container + "')", timeout);
}
}