Подтвердить что ты не робот

Как запустить $(). Ready() в jQuery?

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

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

4b9b3361

Ответ 1

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

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

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

$().ready(initializationFunction);

// later:
initializationFunction(jQuery);

Ответ 2

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

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

Aaron - что бы вы пытались выполнить, повторно инициализируя переменные?

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

Ответ 10

Вы должны иметь возможность с document.ready.apply();