Как вызвать $(). Ready() в jQuery?

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

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

10 ответов

Решение

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

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

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

$().ready(initializationFunction);

// later:
initializationFunction(jQuery);

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

$(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($);

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

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

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

//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/

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

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

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

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

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);

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

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

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

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

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

Другие вопросы по тегам