Как запустить $(). Ready() в jQuery?
Используя jQuery, есть способ перезапустить триггер document.ready
в какой-то момент после загрузки страницы?
Обновление:
jQuery удаляет их после их запуска. В моих экспериментах, похоже, что jQuery будет запускать обратный вызов ().ready
, как только он встретится после запуска начального события ready
.
Ответы
Ответ 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($);
Ответ 3
Что делать, если вы попытались создать контроллер выполнения модуля прямо в функции готовности? Вид вроде этого:
https://gist.github.com/miguel-perez/476046a42d229251fec3
Ответ 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();