jQuery文档准备就绪函数

17

以下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
1
@dmarucco,这应该是一个答案。 - David Tang
@dmarucco:如果你把那个作为答案添加进去,我会批准它。 - tmbrggmn
我觉得作为“响应”它太“简单”了 :) - dmarucco
7个回答

11

以下三种语法是等价的:

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

jQuery 命名空间别名

在使用其他 JavaScript 库时,我们可能希望调用 $.noConflict() 来避免命名空间冲突。当调用此函数时,$ 快捷方式将不再可用,强制我们每次通常写 $ 的地方都要写 jQuery。然而,传递给 .ready() 方法的处理程序可以接受一个参数,该参数是全局 jQuery 对象。这意味着我们可以在我们的 .ready() 处理程序的上下文中重命名对象,而不影响其他代码:

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

8

是的,它们是等价的。请参考此链接.ready()


5

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


4

是的,这两个表达完全相同,但第一个表达方式通常在jQuery中使用以便更加方便。

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

3
以下代码也可以正常工作。
$(document).ready(function(){
    alert("success");
});

或者

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

1

是的:

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

...和:
$(function() { 
  /* code */
});

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

如果你想知道它们为什么会产生相同的结果,那是因为jQuery构造函数——jQuery()函数,别名为$()——及其允许的输入。

该构造函数在api.jquery.com/jquery/有详细文档,其两个相关选项如下所述。


jQuery( selector [, context ] )

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

返回一个 jQuery 对象。

当编写以下内容时,您正在调用 jQuery 构造函数的选项:

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

选择并使用document对象构建jQuery对象。当DOM完全加载时,该jQuery对象在ready()中调用回调函数(匿名函数)。


jQuery( callback )

将一个函数绑定到DOM加载完成时执行。

返回一个jQuery对象。

当编写以下内容时,您正在调用jQuery构造函数的方式如上所示:

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

回调函数(匿名函数)用于构建jQuery对象,并在DOM完全加载后被调用。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接