Запуск jQuery после того, как все остальные JS выполнили - PullRequest
12 голосов
/ 31 марта 2011

В прошлом я использовал $ (window) .onload для запуска блока кода после загрузки других скриптов. В этом случае у меня нет возможности изменить порядок загрузки файлов JS, и код, который меня интересует, должен манипулировать узлами DOM, которые динамически вставляются другим файлом JS, который загружается дальше вниз по странице. Оба сценария расположены в нижней части документа. У кого-нибудь есть предложения по этому сценарию?

Ответы [ 5 ]

18 голосов
/ 31 марта 2011

Если вы знаете, какие элементы ожидать, вы можете использовать setInterval для опроса DOM, чтобы увидеть, когда они были вставлены. Например, так вы могли бы опросить элемент с идентификатором foo:

$(window).load(function ()
{
    var i = setInterval(function ()
    {
        if ($('#foo').length)
        {
            clearInterval(i);
            // safe to execute your code here
        }
    }, 100);
});
2 голосов
/ 31 марта 2011

Даже если вы не можете изменить порядок загрузки, можете ли вы изменить способ его загрузки?

Одна вещь, которую я использовал в прошлом, когда я хотел загрузить некоторый javascript и выполнить некоторый код после того, как я был уверен, что он закончил загрузку, это $ .getScript:

в jquery
$.getScript('javascripttoload.js', function() {
        //do the DOM manipulation you were talking about...
});

http://api.jquery.com/jQuery.getScript/

1 голос
/ 31 марта 2011

Проблема заключалась в попытке объявить переменную для хранения объекта jQuery до того, как объект был на странице. Перемещение этих объявлений внутри блока кода, который был выполнен только после события click, связанного только после $ (window) .load, решило проблему.

Спасибо всем за советы, хотя!

1 голос
/ 31 марта 2011

Если вам нужно присоединить обработчик событий к будущим узлам DOM, вы можете использовать jQuery .live () , в противном случае вы можете использовать плагин livequery .

пример:

$(".nodes").livequery(function () {
    // do something with the nodes
}

, которая вызовет предоставленную анонимную функцию для всех текущих и будущих узлов с классом .nodes

0 голосов
/ 31 марта 2011

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

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