Как убедиться, что мой jQuery .ready работает в конце - PullRequest
6 голосов
/ 02 ноября 2011

У меня есть веб-приложение MVC 2, которое использует мастер-страницы.На главных страницах есть несколько готовых блоков, аналогичных приведенным ниже, разбросанных по всему файлу

$(document).ready(function () {
   ...
});

Аналогично, во многих моих представлениях также разбросано несколько готовых блоков.

Меня попросили ввести еще один готовый блок в мастер, который будет выполняться последним.

Мой вопрос: «Есть ли способ гарантировать, что этот новый готовый блок будет работать последним?».Я думал, что если бы я поместил это в самый конец главной страницы, он бы это сделал, но я не могу убедить себя, что это точно.

Ответы [ 3 ]

5 голосов
/ 02 ноября 2011

Это метод jQuery .add, который вызывается для отправки обратного вызова вашего $(document).ready() в список всех обратных вызовов:

add = function( args ) {
    var i, length, elem, type, actual;
    for ( i = 0, length = args.length; i < length; i++ ) {
        elem = args[ i ];
        type = jQuery.type( elem );
        if ( type === "array" ) {
            // Inspect recursively
            add( elem );
        } else if ( type === "function" ) {
            // Add if not in unique mode and callback is not in
            if ( !flags.unique || !self.has( elem ) ) {
                list.push( elem );
            }
        }
    }
}

источник: обратный вызов jQuery

Итак: то, что он в основном делает, это помещает все функции в массив list и после того, как событие было инициировано - вызывайте их в том же порядке, и если ваша функция была нажата последней - она ​​будет вызвана последней.

Чтобы продвинуть его в последний раз, вы можете объявить его даже в голове после включения всех других файлов .js (просто убедитесь, что нет никаких других $(document).ready() ниже)

1 голос
/ 02 ноября 2011

Вот трюк, которым я пользуюсь. На главной странице объявите

var postReadyEvents = [];

Затем на дочерних страницах, когда у вас есть немного кода, который нужно запустить последним, выполните

postReadyEvents.push(function() {
    ///your stuff - I usually use this to resize a grid or something.
});

Теперь на главной странице $ (документ) .ready () выполните

.
for(var i = 0; i < postReadyEvents.length; i++)
{
    postReadyEvents[i]();
}

Если у вас есть $ (document) .ready () как на дочерних страницах, так и на главных страницах, дочерняя страница запускается первой, а главная страница запускается последней. Этот подход дает вам возможность контролировать запуск определенного блока кода.

0 голосов
/ 02 ноября 2011

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

window.setTimeout( вызов вашей функции здесь , * время задержки в миллисекундах*);

Я знаю, что это не так элегантно, но это то, о чем я подумала, дайте мне знать, помогло ли это вам, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...