2011-04-22 108 views
10

以下jQuery代码片段的最终结果是否相同?jQuery文档准备功能

片段1:

$(function() { alert('test!'); }); 

片段2:

$(document).ready(function() { alert('test!'); }); 

换句话说,是$(function(){})只是$(document).ready(function() { });速记?

我问的原因是因为我们看到一些使用jQuery和jQuery UI构建的小应用程序的一些奇怪问题。偶尔,通过单击按钮执行表单提交操作时,浏览器窗口将会冻结。我们仍然可以使用底层浏览器窗口(启动弹出窗口的窗口),直到我们在那里执行一些操作。用户只能继续强制关闭浏览器(显然,Internet Explorer)。我们怀疑这与Acrobat PDF插件有关,但我只是在这里查看所有角度,因为我发现​​似乎表现出类似的行为。

+5

是他们是等价的。请参阅此链接以供参考http://api.jquery.com/ready/ – dmarucco 2011-04-22 09:42:18

+1

@dmarucco,这应该是一个答案。 – 2011-04-22 09:44:08

+0

@dmarucco:如果您将其添加为答案,我会批准它。 – tmbrggmn 2011-04-22 10:00:34

回答

9

所有这三个如下语法是等价的:

$(document).ready(handler) 
$().ready(handler) (this is not recommended) 
$(handler) 

走样jQuery的命名空间

在使用其他JavaScript库,我们不妨致电$ .noConflict(),以避免命名空间的困难。当这个函数被调用时,$快捷方式不再可用,迫使我们每次通常写$都写jQuery。但是,传递给.ready()方法的处理程序可以接受一个参数,该参数传递给全局jQuery对象。这意味着我们可以修改我们的。就绪()处理范围内的对象,而不影响其他代码:

jQuery(document).ready(function($) { 
    // Code using $ as usual goes here. 
}); 
3

$(function(){})$(document).ready(function() { })是相同的。

3

是的,这是相同的。但第一个通常用于jQuery容易。

$(function() { 
    alert('test!'); 
}); 
1

下面的代码也工作

$(document).ready(function(){ 
    alert("success"); 
}); 

OR

$(function(){ 
    alert("succes"); 
}); 
1

是:

$(document).ready(function() { 
    /* code */ 
}); 

...和:

$(function() { 
    /* code */ 
}); 

......实际上是相同的,后者通常被称为前者的简写。

如果你想知道为什么他们产生相同的结果,它与jQuery的构造 -the jQuery()功能,别名为$()做 - 及其允许的输入。

构造函数记录在api.jquery.com/jquery/,其两个相关选项概述如下。


jQuery(selector [, context ])

接受一个包含CSS选择,然后将其用于匹配一组元素的字符串。

返回一个jQuery对象。

这上面的选项是书写时,你是如何调用jQuery的构造:

$(document).ready(function() { /* code */ }); 

document对象被选中,用于构建jQuery object。当DOM完全加载时,该jQuery对象调用ready()内的回调(匿名函数)。


jQuery(callback)

绑定一种功能,当DOM加载完成后执行。

返回一个jQuery对象。

上面这个选项是书写时,你是如何调用jQuery的构造:

$(function() { /* code */ }); 

回调函数(匿名函数)来构建一个jQuery对象,而当DOM完全加载,它被调用。