2010-11-29 2 views
1

У нас есть страница JavaScript/JQuery с числом «функций инициализации» а-ля:Определите, когда все функции init завершены?

$(function(){ 
    //Do stuff 
} 

Есть программный способ вы можете определить, когда все эти методы завершения работы?

Мы могли бы задать логическую переменную в true в последней функции() ... было интересно, был ли более элегантный способ.

??

ответ

2

Если вам просто нужно определить, были ли они запущены, используйте $.isReady, это будет верно, когда DOM готов к работе, он не установлен только до того, как будет выполняться все обработчики ... так что очень много Однопоточная работа заставила бы вас вас там.

Если вы хотите стоять в очереди что-то выполнить (оно должно быть поставлено в очередь перед темdocument.ready пожаров), привязать его к "ready", как это:

$(document).bind("ready", function() { alert("All ready functions ran"); }); 

You can see how it's fired here, обратите внимание, что это не то же самое как $(document).ready(), which is another function.

+0

$ .isReady не похоже на работу для меня. Установка логической переменной в true в последней функции() работает. Обратите внимание, что я имею в виду этот готовый индикатор в jqGrid loadComplete методы обратного вызова, чтобы узнать, вызван ли обратный вызов для начальной загрузки или последующих нагрузок. – 2010-11-29 16:37:32

1

Предполагая, что вся ваша «инициализация» инициализации является синхронной, вы можете вызвать функцию в конце последней на своей странице, в которой вы можете выполнить код, зная, что все было инициализировано.

$(function(){ 
    //Do stuff 

    run(); 
} 

function run() { 
    // we are initialised now... 
} 

Хотя это не совсем то, что вы просили, это устраняет необходимость проверки того, что функции инициализации завершили работу ... как только у них есть функция run будет называться.

1

попробовать this (example):

HTML:

<div id="test"></div> 

JS:

(function ($) { 

    var 
     owReady = $.ready, 
     readyEndList = []; 

    $.ready = function() { 

     var 
      toEnd = owReady(), 
      fn, i = 0; 

     if (toEnd) 
      return toEnd; 

     if (!$.isReady) 
      return toEnd; 

     while ((fn = readyEndList[ i++ ])) { 
      fn.call(document, jQuery); 
     } 

     readyEndList = null; 

     return toEnd; 

    }; 

    $.addToEndReady = function(fn) { 

     if ($.isFunction(fn)) 
      readyEndList.push(fn); 
    }; 

    $(function (ev) { 

     $('#test').append('<span>0</span><br />'); 

     $.addToEndReady(function(){ 

      $('#test').append('<span>end</span><br />'); 

     }); 

    }); 

    // inicio del modulo 
    $(function (ev) { 

     $('#test').append('<span>1</span><br />'); 

    }); 

    $(function (ev) { 

     $('#test').append('<span>2</span><br />'); 

    }); 

} (jQuery)); 
Смежные вопросы