我可以调用$(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 });
这将是你想要的,只要准备好,直到你准备好了。