jquery - 向`ready()`添加一个函数,或者如果已经'ready()`则调用

时间:2014-05-21 20:00:17

标签: jquery

我不确定如何做到这一点,而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显示正确的功能

似乎我安装的东西破坏了现成的功能。我将浏览所有插件并尝试找出哪些插件。

4 个答案:

答案 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;它应该正常工作

http://jsfiddle.net/ALTG6/

答案 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也会注意并在之后运行您的代码。