将函数传递给jQuery .ready()函数

时间:2011-08-19 15:24:58

标签: javascript jquery event-handling

我目前正在使用Simon Willson's addLoadEvent函数添加我想在load事件后运行的函数。我遇到了一个问题,其中我传递给addLoadEvent函数的函数引用了一个尚未被DOM加载的div,所以我的动作(显示div)没有做任何事情。当我改为使用jQuery $(document).ready函数时,div已经被DOM加载了,我可以用它执行动作(让它显示出来)。

所以,有几个问题。为什么我的函数在使用上面的函数加载完DOM之前执行?有没有办法推迟呢?我能想到的另一种选择是将函数传递给jquery等价物:

function jqueryAddReadyEvent(myFunc)
{ 
    $(document).ready(function()
    {
        //execute already existing functions
        //add a new function to the ready event
        myFunc();
    }
}

当我尝试上面的代码时,我收到一个javascript错误“myFunc不是函数”。有没有办法将函数一般传递给jquery ready函数并让它执行?相当于以下内容:

$(document).ready(function()
{
    funcA();
}
$(document).ready(function()
{
    funcB();
}
...//more of the same

替换为以下内容:

jQueryAddReadyEvent(funcA);
jQueryAddReadyEvent(funcB);

4 个答案:

答案 0 :(得分:2)

你可以这样做:

$(document).ready(myFunc);

将函数附加到DOM ready事件。这是小提琴:http://jsfiddle.net/padtE/

答案 1 :(得分:1)

如果您需要添加许多功能,我建议您执行以下操作:

Create an array that will old all the functions you want to call.
Add functions to that array as you please.
In the .ready(function() { ... }) call every function in that array.

你已经确定了。

答案 2 :(得分:0)

function jqueryAddReadyEvent(myFunc) {
    $(myFunc);
}

jqueryAddReadyEvent(function() {
    alert('hello world');
});

演示:http://jsfiddle.net/AlienWebguy/UzMLE/

答案 3 :(得分:0)

对我而言看起来是正确的。很可能你用的东西不是函数来调用它。

顺便说一句,你可以将其缩短为:

var jqueryAddReadyEvent = $(document).ready

或者直接使用$(document).ready()来获得相同的效果,因为它专门做你想做的事情,在加载后运行函数,实际上更短。

$(document).ready(funcA);
$(document).ready(funcB);