清除jquery document.ready()调用

如何通过jquery document.ready()调用清除设置为触发的匿名函数?

例如:

 //some code sets a doc ready callback $(document).ready(function () { alert('ready'); }); //my attempt to prevent the callback from happening window.onload = null; $(document).unbind("ready");  

无论我试图绕过它,警报都会发生。 有没有办法做到这一点?

如果你描述了你真正试图解决的问题,你可能会得到最合适的答案。

jQuery没有公开记录的方法来撤消或阻止document.ready()处理程序。 如果您控制代码,您可以使用全局变量和条件,如下所示:

 var skipReady = false; $(document).ready(function () { if (!skipReady) { alert('ready'); } }); // skip the document.ready code, if it hasn't already fired skipReady = true; 

或者,如果你想破解jQuery(除了文档化的接口),你可以这样做:

 $(document).ready(function() { alert("ready"); }); // stop the ready handler $.isReady = true; 

你可以在这里看到最后一个工作: http : //jsfiddle.net/jfriend00/ZjH2k/ 。 这是因为jQuery使用属性: $.isReady来跟踪它是否已经解雇了现成的处理程序。 将它设置为true会让它认为它已经解雇了它们,所以它不会再次每次都这样做。

这有效:

 $(document).bind("ready", function () { alert("hey!"); }); $(document).unbind("ready"); 

对我来说似乎是一个错误 – jQuery中的所有其他事件都可以解除绑定。 省略这一点是不一致的。

对于遗漏没有直接的答案,但这里是jQuery文档的一些相关信息:

以下所有三种语法都是等效的:

  • $(document).ready(handler)
  • $().ready(handler) (不建议这样做)
  • $(handler)

还有$(document).bind("ready", handler) 。 这与ready方法的行为类似,但有一个例外:如果ready事件已经触发并且您尝试.bind("ready") ,则不会执行绑定的处理程序。 以这种方式绑定的就绪处理程序在被上述其他三种方法绑定后执行。

$(document).ready()依赖于浏览器触发的onLoad事件,这意味着您无法阻止它发生。 如果alert()由某些条件确定,那么我将使用if / else语句来决定是否调用它。

超级老问题,但最近需要这样做以防止document.ready代码我在某些情况下无法控制运行。 这可以通过代理jQuery的ready函数来实现,而不是像测试间谍。 以下将有效:

 var ready = $.prototype.ready; // proxy the ready function $.prototype.ready = function ( fn, allowed ) { allowed = allowed || false; if ( allowed ) { ready.call( this, fn ); } }; 

现在将忽略对$( document ).ready所有调用。 您可以通过传递true作为第二个参数来覆盖此行为: $( document ).ready( fn, true )