2012-03-01 2 views
1

У меня есть код в файле js.setTimeout() не вызывает функцию после указанного времени

function makeScrollable(wrapper, scrollable){ 
    ... 
    // Hide images until they are not loaded 
    scrollable.hide(); 

    var loading = $('<div class="loading">Loading...</div>').appendTo(wrapper); 

    // Set function that will check if all images are loaded 
    var interval = setInterval(function(){ 
     var images = scrollable.find('img'); 
     var completed = 0; 

     if (completed == images.length) { 
      clearInterval(interval); 

      // Timeout added to fix problem with Chrome 
      setTimeout(function(){ 
       loading.hide(); 
       .... 
      }, 1000); //end of setTimeout(func, delay) 

     } //end of if (completed == images.length) 

    }, 100); //end of var interval = setInterval(fn, 100) 

    ... 
} 

(function(){ 
    makeScrollable("div.sc_menu_wrapper", "div.sc_menu"); 
})(jQuery); 

Но моя функция таймаута не звонит. Я все еще получаю загрузку Div. Функция должна быть вызвана через 1 секунду, после чего скрыть контейнер загрузки и выполнить код. Но этого не происходит. Что я делаю неправильно? Thanks

+0

ли если условие 'если (завершено == images.length)' возвращает истину? .. –

+0

Да, это касается функции clearInterval(), а также функции setTimeOut(). Я видел это во время отладки с firebug, но функция не звонит :( – Basit

+0

Я не уверен в этом, но остаюсь в покое. Отладка попробует поместить предупреждение в функцию 'setTimeout', чтобы увидеть, что-то это всплывает или нет !!! –

ответ

1

Неверное положение кода.

var completed = 0; 

    if (completed == images.length) { // This will be true only when there are no images 
     clearInterval(interval); 


     setTimeout(function(){ 
      loading.hide(); 
      .... 
     }, 1000); 

    } 

поставить его вне

var completed = 0; 
var interval = setInterval(function(){ 
    var images = scrollable.find('img'); 


    if (completed == images.length) { 
     clearInterval(interval); 

     // Timeout added to fix problem with Chrome 
     setTimeout(function(){ 
      loading.hide(); 
      .... 
     }, 1000); //end of setTimeout(func, delay) 

    } //end of if (completed == images.length) 

}, 100); //end of var interval = setInterval(fn, 100) 

И надеюсь, что вы приращением completed где-то в коде

+0

Я увеличиваю число завершенных непосредственно перед строкой 'if (завершено == images.length) {..}' Вот что я делаю 'var completed = 0; -> images.each (function() {if (this.complete) {completed ++}}); -> if (завершено == images.length) {..} '. И я становлюсь правдой, мне нужно проверить, очистить интервал, перейти в функцию setTimeout, но не выполнить его. – Basit

+0

Я бы предложил вам поделиться полным кодом .. Если возможно, сделайте демо в http: // jsfiddle .сеть – Diode

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