Как вызвать $ (). Ready () в jQuery? - PullRequest
13 голосов
/ 18 февраля 2009

Используя jQuery, есть ли способ перезапустить триггер document.ready в какой-то момент после загрузки страницы?

Обновление: JQuery сбрасывает их, как только они запускаются. В моих экспериментах похоже, что jQuery запустит обратный вызов ().ready, как только он встретится, как только начнется событие ready.

Ответы [ 10 ]

26 голосов
/ 18 февраля 2009

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

Очевидно, что вызов $().trigger("ready") напрямую не работает, потому что jQuery сбрасывает обработчики готовых событий после их запуска. Вам нужно будет отслеживать функции, которые нужно вызвать, и вызывать их напрямую, как показано ниже.

Конечно, может быть лучше просто вызвать функцию напрямую, чтобы не перезапускать то, что вы не собирались (некоторые плагины могут иметь свои собственные функции $ (). Ready (), которые они надевают не ожидаю запуска дважды).

$().ready(initializationFunction);

// later:
initializationFunction(jQuery);
6 голосов
/ 05 августа 2014

Вы можете сделать что-то вроде этого:

$(document).on('ready readyAgain', function() {
    // do stuff
});

// At some other point in time, just trigger readyAgain
$(document).trigger('readyAgain');

Примечание:

$(document).on('ready') устарел в jQuery 1.8 согласно документации . Альтернативный метод заключается в следующем:

function myReadyFunction(){}
$(myReadyFunction);

// at some other point, just call your function whenever needed:
myReadyFunction($);
4 голосов
/ 03 сентября 2014

Что если вы попытались встроить контроллер выполнения модуля прямо в функцию ready? Вроде как это:

https://gist.github.com/miguel-perez/476046a42d229251fec3

1 голос
/ 24 января 2016

В некоторых случаях вам нужно добавить больше кода (скриптов) в другие места кода, поэтому создание функции ограничивает вас написанием всего кода в той же области. Вот почему я предпочитаю добавлять свои собственные события и затем запускать их:

//Add a page Ready custom event
$( document ).on( "page.ready", function( event ) {
    //Your Ready Scripts
});

//Add a page Load custom event
$( document ).on( "page.load", function( event ) {
    //Your Load Scripts
});

//Trigger Ready scripts on page ready
jQuery(function($) {
    $( document ).trigger( "page.ready" );
});

//Trigger Load scripts on page load
$(window).load(function () {
    $( document ).trigger( "page.load" );
});

//Trigger the Custom events manually
$( document ).trigger( "page.ready" );
$( document ).trigger( "page.load" );

https://learn.jquery.com/events/introduction-to-custom-events/

1 голос
/ 18 февраля 2009

Аарон - чего бы ты хотел добиться, переинициализируя переменные?

Отредактировано ... Красота jQuery, на мой взгляд, заключается в функциях обратного вызова. Почему бы просто не выполнить какое-либо действие / функцию после события.

0 голосов
/ 20 июля 2017

Легко: вам просто нужно отключить флаг безопасности jQuery.isReady. Установите для jQuery.isReady значение false и используйте jQuery (документ) .trigger («готово») для повторного запуска этого события. Это очень полезно для навигации в стиле турболинк.

0 голосов
/ 15 декабря 2016

Если вам это поможет:

var document_on_ready = new Array();

function on_ready(){
   for(i=0;i<document_on_ready.length;i++){
      document_on_ready[i].call();
   }
}
$(function(){
   on_ready();
});

var counter = 0;
document_on_ready.push(function(){
   counter++;
   console.log('step1: ' + counter);
});

document_on_ready.push(function(){
   counter++;
   console.log('step2: ' + counter);
});

window.setTimeout(on_ready,1000);
0 голосов
/ 04 августа 2009

Частичная загрузка страниц ASP.Net UpdatePanel - это еще одно место, где может потребоваться повторная активация функции загрузки - не то, чтобы $().ready было подходящим местом для этого. В этом случае вы можете использовать page_load или событие endrequest инфраструктуры MS.

0 голосов
/ 04 августа 2009

Я вижу один сценарий, в котором это было бы очень полезно: если вы откладываете загрузку jQuery до тех пор, пока не загрузится все остальное, вы динамически добавляете новый элемент скрипта для загрузки jQuery.

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

Вы могли бы использовать именованные функции и вызывать их вместо этого, но это все равно сломало бы любой плагин, использующий $ (document) .ready.

0 голосов
/ 18 февраля 2009

Вы должны быть в состоянии с document.ready.apply ();

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