2011-08-19 144 views
0

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

因此,一对夫妇的问题。为什么我的函数在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); 
+0

如果您收到此错误,那么你是不是传递一个函数来'jqueryAddReadyEvent'(http://jsfiddle.net/fkling/A2Pm3/)。 –

+0

你传递给jqueryAddReadyEvent的参数是什么?你确定它是一个函数吗? –

+0

尽管我不推荐它,但您始终可以使用'setTimeout'。我敢说'$(document.read(function(){funcA(); funcB();});'是最好的方法。找出更多关于你的参数的信息(如果你还没有查找'console.log',你会喜欢的) – Jacksonkr

回答

2

你可以这样做:

$(document).ready(myFunc); 

附加功能的DOM准备的事件。这里的小提琴:http://jsfiddle.net/padtE/

+3

并且/或者使用快捷键' $(myFunc)'。 –

+0

这不起作用 – Jeremy

+1

@Jeremy:究竟是什么意思?**什么**不起作用?如果你不提供你的代码,我们无法提供帮助。作为jsfiddle清楚地显示出来的。 –

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. 

你”重启。

+0

我仍然收到一个错误,说“myFunc不是函数” – Jeremy

0

它看起来正确的给我。最有可能的是你用一种不是函数的方式来调用它。

顺便说一句,您可以缩短这:

var jqueryAddReadyEvent = $(document).ready 

或只使用$(文件)。就绪()直接为同样的效果,因为它专门做了你想做的事,后负荷运行功能,而且实际上更短。

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