Хотя у меня сама проблема, казалось бы, решена, я надеюсь, что кто-то может пролить свет на почему этого ...
Ниже приведены два снимка одной и той же функции, работа которых заключается в удалении элемента div, содержащего сообщение обратной связи с пользователем. Он настроен на использование необязательного тайм-аута, если указан тайм-аут, он вызывает сам себя, используя setTimeout (), который затем удаляет div.
Единственное различие между двумя версиями функции заключается в том, что this.remove () вызывается - в версии проблемы я отправляю сообщение в журнал, используя сначала blackbirdjs и затем вызовите this.remove () - после того, как это выполнится, журнал заполняется бесконечными сообщениями журнала «Удаление обратной связи div ...» так быстро, как их может накачать браузер.
В рабочей версии, однако, я просто изменяю порядок, и все работает нормально, и все хорошо ...
Я ошеломлен, я думаю, что порядок в этом случае будет тривиальным, но, очевидно, нет. Может кто-нибудь пролить свет на то, почему это происходит? Это ошибка jQuery или проблема с дроздом или какая-то странная причуда JavaScript вообще?
Примечание:
У меня был некоторый смешанный успех, когда я использовал вызов метода verify () - если он вернулся false, я сказал ему вернуться, и это остановило его - однако, просто добавив return после того, как вызов remove не дал результата.
Интересно, что любая из версий в 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);
}
}