我不确定如何做到这一点,而jquery文档几乎没有帮助。
在我的代码中的某个点,我需要运行函数foo()
function foo(){ alert('foo()'); }
通常,foo()
将在文档为ready
之后调用:
$(document).ready(function(){foo();})
但是之后可能需要调用它:
foo();
当我需要运行foo时,有没有办法测试文档是ready
还是将其添加到jquery ready
承诺?
如果foo()
已经运行,则在jquery ready
承诺中包装ready()
将无法运行。
更新
基于KevinB的评论,我尝试在加载后在不同的jquery版本上运行测试。
$(document).ready(function(){alert('ok');});
我收到了每个版本的警报。包括我使用的那个(1.11.1)
我尝试将我的代码包装在try / catch块中;什么都没有。
$ .ready显示正确的功能
似乎我安装的东西破坏了现成的功能。我将浏览所有插件并尝试找出哪些插件。
答案 0 :(得分:1)
您可以将其包裹在.ready()
来电中。
如果文档尚未就绪,那么当文档按预期准备好时,jQuery会将该函数排队以便稍后运行。
如果文档已经准备就绪,那么jQuery将立即运行该函数。
所以,你可以这样做:
$(document).ready(foo);
随时。如果文档已经就绪,或者文档准备就绪后,foo()
将立即运行。
工作示范:http://jsfiddle.net/jfriend00/BeEwT/
如果由于某种原因你不习惯让jQuery为你处理这个问题,你也可以这样做:
function runWhenSafe(fn) {
if (document.readyState === "complete") {
fn();
} else {
$(document).ready(fn);
}
}
runWhenSafe(foo);
尽管如此,我不得不说,.ready()
几乎已经为你做了这个额外的代码。
答案 1 :(得分:1)
如果ready()已经运行,则在jquery ready promise中包装foo()将不会运行它。
这绝对是假的。如果文档已经准备好,则向$(document).ready
添加另一个函数将立即触发该函数。您可以根据需要随时使用$(document).ready
;它应该正常工作。
答案 2 :(得分:0)
如果你的其余代码都包含在ready()
中,那么DOM肯定已经准备就绪。
$(document).ready(function(){
foo();
// other code
$otherElt.change(foo); // this is guaranteed to be called after ready event has fired
});
答案 3 :(得分:-1)
您可以使用以下代码执行此操作:
$(document).ready(foo});
,
$(document).ready(function(){foo();});
,
$(document).on('ready', foo);
,或
$(document).on('ready', function() {foo();});
即使之前已发出'ready'
,jQuery也会注意并在之后运行您的代码。