2012-06-04 2 views
2

У меня есть следующий кодSetTimeout() срабатывание без задержки

 Ext.onReady(function() { 
      setTimeout(everything(), 30000); 
     }); 

Я пытаюсь ждать EXT.NET полностью завершить составление страницы перед применением каких-либо JavaScript для elemtents. Это не проблема в большинстве браузеров, поскольку $ (document) .load обеспечивает достаточную задержку. Конечно, ужасный интернет-исследователь запускает .load преждевременно, что означает, что мне приходится вводить задержку с жесткой кодировкой. Однако вышеприведенный код НЕ НИЧЕГО не задерживает выполнение всего().

Любые идеи?

ответ

13

() Удалите из everything

setTimeout(everything, 30000); 

() Включив, вы сообщаете браузеру немедленно выполнить everything и отправить его возвращаемое значение в качестве функции обратного вызова к setTimeout.

+0

Получил ваш прямо перед моим, +1 для вас. –

+0

+1 для объяснения причин, почему это происходит. – Niels

1

изменение

setTimeout(everything(), 30000); 

в

setTimeout("everything()", 30000); 

или

setTimeout(everything, 30000); 
+0

очень желательно пройти по ссылке, fyi – thescientist

+0

@KevinB ah, привет, спасибо, что поймал это для меня. – brenjt

1

Как уже писал, вы должны писать вместо этого:

Ext.onReady(function() { 
    setTimeout(everything, 30000); 
}); 

То, что они не отправили, является объяснением. В приведенном выше фрагменте everything является ссылкой на функцию в области, которая называется методом Ext.onReady(). В вашем вопросе вы используете setTimeout() для выполнения результата функции everything(). Вероятно, ваша функция everything() возвращает undefined, поэтому ваш вызов setTimeout() никогда ничего не делает.

Кто-то предложил использовать setTimeout("everything()", 30000). Это effectively the same thing с помощью eval(). Таким образом, это не рекомендуется.

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