使用jQuery,有没有办法在页面加载后的某个时刻重新触发document.ready
触发器?
更新:
jQuery一旦运行就会脱掉它们。在我的实验中,看起来jQuery会在触发初始().ready
事件后遇到ready
回调。{/ p>
答案 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');
$(document).on('ready')
已在jQuery 1.8中弃用。另一种方法如下:
function myReadyFunction(){}
$(myReadyFunction);
// at some other point, just call your function whenever needed:
myReadyFunction($);
答案 2 :(得分:4)
如果您尝试将模块执行控制器直接构建到就绪功能中,该怎么办?有点像这样:
答案 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();