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