jQuery $(function(){})和$(document).ready一样吗?

时间:2012-05-15 07:18:36

标签: javascript jquery

要在字段上设置工作日期选择器,我必须将此脚本放在我的元素

$( function() {
  $( "#date_datepicker" ).datepicker( { dateFormat: "yy-mm-dd" } );
});

删除$( function() {会使日期选择器失效。

这是否意味着$( function() {$(document).ready相同?

我正在尝试优化我的javascript代码,因此了解这可能有所帮助。

7 个答案:

答案 0 :(得分:29)

请参阅以下摘录自http://api.jquery.com/ready/

  

以下所有三种语法都是等效的:

     
      
  • $(document).ready(handler)
  •   
  • $().ready(handler)(不建议这样做)
  •   
  • $(handler)
  •   

答案 1 :(得分:6)

.ready()方法通常与匿名函数一起使用:

$(document).ready(function() {
  // Handler for .ready() called.
});

这相当于调用:

$(function() {
 // Handler for .ready() called.
});

As can be read here

答案 2 :(得分:4)

是的,它是同一件事的速记版本。当函数作为参数传递时,$函数调用$(document).ready函数。

如果你试图在速度方面进行优化 - 两者的表现都相当,但是如果执行很多次,$(document).ready(handler)越长,速度就越快。

如果您尝试在文件大小方面进行优化,请使用缩小器。

IMO,您可以做的最好是在可读性和简单性方面进行“优化”。这使代码更容易理解和维护。有一些工具可以为您提供未经优化的版本并进行压缩和优化(请查看Google的闭包编译器)。

答案 3 :(得分:2)

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

$( function() {用作简写语法,但$(document).ready使代码更具可读性。

答案 4 :(得分:2)

这是一种在准备好的

上运行代码的非常安全的方法
jQuery(function($, undefined){
  // code to run onready
});

虽然我个人更喜欢这样做:

(function($){ // create scope and pass specific aliased variables

    $(function($, undefined){ // attach callback to run onready
       // code to run onready
    });

})(jQuery);

通过这种方式,您可以创建自己的功能包,而不必担心破坏其他人的代码或者使用松散的变量定义来破坏代码。您也可以调用您传递的变量以及您想要的任何名称,例如,代码在准备就绪时不运行。

(function($){ // create scope and pass specific aliased variables


    $(document).on('click', 'a[href]', function(){
       // code to run when a link is clicked
    });
    $(window).on('load',function(){
       // code to run onload
    });
    $(function($, undefined){ // attach callback to run onready
       // code to run onready
    });


})(jQuery);

请注意,这些是相同的

$(document).bind('ready', function(){});
$(document).on('ready', function(){});
$(document).ready(function(){});
$(function(){});

该文档没有加载事件

$(document).on('load', function(){}); // will not work

答案 5 :(得分:1)

请注意,您还可以找到这样的脚本:

jQuery(document).ready(function(){

这里$ -sign被jQuery取代以避免与其他库的冲突

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

答案 6 :(得分:-1)

您使用的是jQuerymobile吗?如果是这样,而不是使用文档就绪

$('#pageId').live('pageinit',function(){});