如何通过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>
无论我试图绕过它,警报都会发生。有没有办法做到这一点??
答案 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 )