27

要在字段上使用有效的日期选择器,我必须将此脚本放在我的元素中

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

删除 $( function() { 会使日期选择器不起作用。

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

我正在尝试优化我的 javascript 代码,所以知道这可能会有所帮助。

4

7 回答 7

43

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

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

  • $(document).ready(handler)
  • $().ready(handler)(不建议这样做)
  • $(handler)
于 2012-05-15T07:19:57.747 回答
14

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

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

这相当于调用:

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

可以在这里阅读

于 2012-05-15T07:21:14.713 回答
5

是的,它是同一事物的简写版本。该函数在将函数作为参数传递时$调用该函数。$(document).ready

如果您尝试在速度方面进行优化 - 两者的性能几乎相同,但是$(document).ready(handler)如果执行很多次,则更长的时间会更快。

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

IMO 你能做的最好的事情就是在可读性和简单性方面“优化”。这使得代码更容易理解和维护。有一些工具可以获取未优化的版本并为您压缩和优化(查看 Google 的闭包编译器)。

于 2012-05-15T07:20:02.083 回答
3

是的,$( function() { 而且$(document).ready是一样的。

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

于 2012-05-15T07:20:29.930 回答
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
于 2014-05-14T08:14:06.623 回答
1

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

jQuery(document).ready(function(){

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

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

于 2012-05-15T07:25:17.480 回答
0

你在使用 jQuerymobile 吗?如果是这样,而不是使用文档准备使用

$('#pageId').live('pageinit',function(){});
于 2012-05-15T07:24:09.627 回答