如何在jQuery中触发$()。ready()?

时间:2009-02-18 18:15:24

标签: jquery

使用jQuery,有没有办法在页面加载后的某个时刻重新触发document.ready触发器?

更新: jQuery一旦运行就会脱掉它们。在我的实验中,看起来jQuery会在触发初始().ready事件后遇到ready回调。{/ p>

10 个答案:

答案 0 :(得分:26)

如果您只需确保运行新的初始化函数,则无需执行任何操作。当您在$().ready中添加新的事件处理程序时,在文档完成加载后,它将立即运行。

显然,直接调用$().trigger("ready")不起作用,因为jQuery在运行它们后会重置ready事件处理程序。您需要跟踪需要呼叫的功能,并按以下方式直接调用它们。

当然,直接调用函数可能会更好,所以你不要重新运行你不想要的东西(某些插件可能有自己的$()。ready()函数预计会跑两次。

$().ready(initializationFunction);

// later:
initializationFunction(jQuery);

答案 1 :(得分:6)

您可以这样做:

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

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

注意:

根据{{​​3}},

$(document).on('ready')已在jQuery 1.8中弃用。另一种方法如下:

function myReadyFunction(){}
$(myReadyFunction);

// at some other point, just call your function whenever needed:
myReadyFunction($);

答案 2 :(得分:4)

如果您尝试将模块执行控制器直接构建到就绪功能中,该怎么办?有点像这样:

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

答案 3 :(得分:1)

Aaron - 你想要完成什么,重新初始化变量?

...编辑 在我看来,jQuery的美妙之处在于回调功能。为什么不在事件发生后执行一些动作/功能。

答案 4 :(得分:1)

在某些情况下,您需要在代码的其他位置添加更多代码(脚本),因此创建函数会限制您在同一区域中编写所有代码。这就是为什么我更喜欢添加我的自定义事件,然后触发它们:

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

答案 5 :(得分:0)

我可以看到一个非常有用的场景,即如果你延迟加载jQuery直到其他所有内容都被加载,那么你动态附加一个新的脚本元素来加载jQuery。

在这种情况下,$(document).ready并不总是被触发,因为在很多情况下,文档将在jQuery完成加载之前完全加载并设置了正确的事件处理程序。

您可以使用命名函数并调用它们,但它仍会破坏任何依赖于$(document).ready的插件。

答案 6 :(得分:0)

如果它可以帮到你:

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

答案 7 :(得分:0)

简单:您只需要禁用安全标志jQuery.isReady。将jQuery.isReady设置为false并使用jQuery(document).trigger('ready')重新触发此事件。这对于turbolinks风格的导航非常有用。

答案 8 :(得分:-1)

ASP.Net UpdatePanel部分页面加载是另一个可能需要重新触发加载功能的地方 - 而不是$().ready是正确的地方。在这种情况下,您可以使用page_load或MS框架的endrequest事件。

答案 9 :(得分:-2)

你应该可以使用document.ready.apply();