2009-10-27 3 views
1
var checkTextValue = setTimeout(function() { 
var textVal = $('p').text(); 
if (textVal == 'expectedValue'){ 
    callback(); 
} else { 
    setTimeout(arguments.callee, 10); 
} 
},10); 

У меня этот код, он работает нормально, но проблема в том, что в Firefox есть страница, которая бесконечно загружается.javascript setTimeout, страница выглядит как бесконечная загрузка (firefox)

+1

Помимо бесконечной загрузки, какое событие вы ожидаете обновить текст абзаца? Обновляется ли он? В зависимости от того, что вы делаете, задержка в 10 мс может оказаться недостаточной для других событий (хотя это и не представляется возможным в современных системах). –

+0

в моем реальном коде. Я получаю этот абзац из iframe, и абзац напечатан в этом iframe на странице php как результат успеха, вот что я ищу в этом параграфе ... (php печатает 1 для успеха и 0 для отказа) – kmunky

+0

вы можете подумать о замене iframe на запрос ajax ... – jantimon

ответ

0

Это потому, что это бесконечно загружается. В основном вы выполняете рекурсию и запускаете другой экземпляр каждые десять миллисекунд. Учитывая достаточное время, я думаю, что также можно убить ваш браузер этим кодом.

Попробуйте использовать вместо этого поле ввода onchange -eventhandler.

+2

Я уверен, что это каждые десять миллисекунд, а не секунды – Cameron

+0

ok, но функция вызывается каждые десять миллисекунд, пока textVal не получит ожидаемое значение. вот как я интерпретирую этот код ... – kmunky

+0

dang, вы правы ... – ty812

-1

Я думаю, что это случай recusrsion. Google «recusrion» для получения дополнительной информации. Просто шучу. checkTextValue будет работать неопределенно, если значение не будет 'expectedValue'.

1

Выглядит бесполезно ... Я имею в виду setTimeout (checkTextValue, 10); - Что ты там садишься? checkTextValue - это всего лишь идентификатор таймаута, ничего больше ... Не знаю, почему FF будет загружаться бесконечно, просто потому, что код неисправен ...

+0

это небольшая версия моего исходного скрипта, я обновил его (arguments.callee), и он действительно работает ... единственная проблема что статус постоянной загрузки в FF – kmunky

+1

var check = function() {console.log ('chack'); setTimeout (chack, 1000); } check(); Этот код отлично работает без этой проблемы с загрузкой (то же самое упрощенно). Так что попробуйте. Если он работает, это означает, что вам необходимо увеличить тайм-аут. – Jefim

+1

Btw, ваш код работает в моей FF 3.5.4pre Win. Итак, э-э ... проверьте свой FF? :) Никаких нагрузок «похожих друг на друга» симптомов. – Jefim

Смежные вопросы