清除jquery document.ready()调用

时间:2011-10-18 22:14:35

标签: javascript jquery javascript-events

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

例如:

<script type="text/javascript">
    //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");

</script>

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

4 个答案:

答案 0 :(得分:5)

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

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会让它认为它已经解雇了它们,所以不会每次都这样做。

答案 1 :(得分:1)

这有效:

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

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

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

  

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

超级老问题,但最近需要这样做以防止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 )