我可以调用$(document).ready()来重新激活所有载入事件处理程序吗?

有没有人碰巧知道如何以及如何重新调用所有的负载事件处理程序? 我引用了一些我没有控制的.js文件,这些.js库在$(document).ready()中做了初始化,不幸的是没有提供任何简单的函数来重新初始化。

我目前正在尝试用ajax调用内容replace一个大的div块,所以我必须重新初始化外部库。 所以,只要调用$(document).ready()就可以重新初始化一切。

到目前为止,我已经在ajax调用中尝试了这个:

success: function(data) { alert('1'); // Displays '1' $('#content').html(data); alert('2'); // Displays '2' $(document).ready(); alert('3'); // Does not display } 

调用$(document).ready(); 也安静地失败。 JavaScript控制台显示没有错误。 有谁知道这是可能的(没有修改JavaScript库文件)?

既然你问了怎么做,而不修改外部JS文件,我会这样回答。 我已经在debugging器中跟踪了jQuery中的.ready()函数,看起来页面准备就绪时调用的根函数是这样的:

 jQuery.ready(); 

但是,看起来你不能只是再次调用它来完成你想要的,因为它看起来是第一次触发时,它从之前注册的函数(例如忘记它们)中解开。 因此,第二次手动调用jQuery.ready()不会再次触发相同的函数调用,并validation在debugging器中(断点只是一次,而不是第二次)。

所以,如果不改变jQuery的实现,你就不能解决这个问题,所以它不能解除绑定(允许多次发射),或者改变每个ready handler的代码来使用你自己的事件,想。

我做了这样的事情:

 // When document is ready... $(function(){ onPageLoad(); }); function onPageLoad(){ // All commands here } 

现在我可以在任何需要的时候调用这个函数。

一个简单的方法来实现这个只是发明你自己的事件是这样的:

 $(document).bind('_page_ready', function() { /* do your stuff here */}); 

然后添加这个:

 $(function() { $(document).fire('_page_ready'); }); // shorthand for document.ready 

最后,只要你需要再次运行,你只需调用它:

 $(document).fire('_page_ready'); 

[编辑]

如果你真的不能编辑外部脚本文件,我已经做了一个让你想做的jsFiddle,你可以看看这里的代码: http : //jsfiddle.net/5dRxh/

但是,如果你不想使用这个,那么在你包含jQuery之后添加这个脚本是很重要的,就像这样:

 <script src="jquery.js" type="text/javascript"></script> <script> //script from jsFiddle (only the plugin part at the top). </script> <!-- All the other script-files you want to include. --> 

我不认为这是可以做到的,因为jquery在执行后解除了ready事件。 来源:

 // Trigger any bound ready events if ( jQuery.fn.trigger ) { jQuery( document ).trigger( "ready" ).unbind( "ready" ); } 

你可以做到这一点简单。

做一个function:

 function REinit() { /// PLACE HERE ALL YOUR DOC.READY SCRIPTS } 

在doc.ready中放置Reinit()函数:

 $(document).ready(function(){ REinit(); }); 

然后在ajax行动之后就打电话

 REinit(); 

我认为只需将准备好的事件改为pjax成功就可以了

将其从:

 $(document).ready(function() { // page load stuff }); 

至:

 $(document).on('ready pjax:success', function() { // will fire on initial page load, and subsequent PJAX page loads }); 

这将是你想要的,只要准备好,直到你准备好了。

https://api.jquery.com/jquery.holdready/