雖然我本身的問題看似解決了,我希望有人能擺脫對的這究竟是爲什麼一些輕...jQuery的一個.remove()回調調用觸發無限循環
下面是兩個快照其作用是刪除包含用戶反饋消息的div。它設置爲使用可選的超時,如果指定了超時,它使用setTimeout()調用自己,然後移除div。
函數的兩個版本之間的唯一區別就是this.remove()被稱爲 - 在這個問題的版本我使用blackbirdjs,然後再調用this.remove(發送消息到日誌) - 後這會執行日誌充斥着無數日誌消息「Removing feedback div ...」,就像瀏覽器可以將它們吸入一樣快。
但是,在工作版本中,我只是顛倒了順序,一切正常執行,一切都很好...
我很難過,我會認爲在這種情況下的順序是微不足道的,但顯然不是。任何人都可以闡明爲什麼會發生這種情況?這是一個jQuery錯誤還是黑鳥的問題或一般的JavaScript的怪異怪異?
注:
我只好用電話確認()一些混雜的成功 - 如果它回來了假,我告訴它返回,該停止了它 - 但是,刪除呼叫後,只是增加收益無影響。
有趣的是,兩個版本似乎都能在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);
}
}
gah ..../head-slam-on-desk我還沒有機會測試這一點,並可能不會在下一段時間(週五聖誕節假期開始時帶了一些年假),但看完這個錯誤似乎很清楚......菜鳥的錯誤。 – 2009-12-20 04:10:06
對不起,很長的延遲 - 第一天回到工作。非常感謝! – 2010-01-04 14:13:04