2012-05-15 22 views
10

Aby mieć datepicker pracującego na polu, muszę umieścić ten skrypt w moim elementu

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

usuwając $(function() { czyni datepicker nie działa.

Czy to oznacza, że ​​$(function() { jest taki sam jak $(document).ready?

Próbuję zoptymalizować moje kody javascript, więc wiedząc, że to może pomóc.

+0

możliwe duplikat [jQuery dokument gotowy funkcja] (http: // stackoverflow .com/questions/5754192/jquery-document-ready-function) – jtheletter

Odpowiedz

19

patrz poniżej wyciąg z http://api.jquery.com/ready/

wszystkich trzech poniższych składni są równoważne

  • $(document).ready(handler)
  • $().ready(handler) (nie jest to zalecane)
  • $(handler)
+2

Dzięki, szukałem w Google, ale myślę, że posiadanie specjalnych znaków takich jak $ sprawia, że ​​trudno jest uzyskać odpowiedni wynik. – MegaNairda

4

Tak, jest to skrócona wersja tego samego. Funkcja $ wywołuje funkcję $(document).ready po przekazaniu funkcji jako argumentowi.

Jeśli próbujesz zoptymalizować pod względem szybkości - oba będą działać w podobny sposób, jednak dłuższy $(document).ready(handler) będzie minimalnie szybszy, jeśli zostanie wykonany wiele razy.

Jeśli próbujesz zoptymalizować pod względem rozmiaru pliku - użyj miniarki.

Najlepszym rozwiązaniem dla IMO jest "optymalizacja" pod względem czytelności i prostoty. To sprawia, że ​​kod jest dużo łatwiejszy do zrozumienia i utrzymania. Dostępne są narzędzia do pobrania niezoptymalizowanej wersji oraz kompresji i optymalizacji (sprawdź kompilator zamykania Google).

+0

Mój kod zawiera oba dwa wymienione na górze mojej strony. Dobrze jednak, że nie wpadłem w kłopoty, mając oboje na górze mojej strony. Spróbuję użyć miniarki, tak jak powiedziałeś po tym, jak skończyłem ręcznie, optymalizując mój kod, redukując zbędne kody, takie jak te i inne podobne połączenia, które można połączyć w jedno wywołanie funkcji. – MegaNairda

+0

Mam nadzieję, że nie popadnę w kompatybilność kłopot z użyciem _shorthand_ jak w przypadku Internet Explorera przy używaniu skrótu ajax '$ .post' – MegaNairda

1

Tak, $(function() { i $(document).ready są takie same.

$(function() { działa jak skrócona składnia, ale $(document).ready sprawia, że ​​kod jest bardziej czytelny.

+1

Dzięki, wolałbym też' $ (document) .ready' zamiast '$ (function() {'. – MegaNairda

3

.ready() metoda jest zwykle używany z anonimowej funkcji:

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

co jest równoznaczne z wywołaniem:

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

As can be read here

-1

Używasz jQuerymobile?jeśli tak, to zamiast używać dokument gotowy korzystanie

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

Niezupełnie , po prostu normalny jQuery. – MegaNairda

1

Oto całkiem bezpieczny sposób na uruchomienie kodu na gotowy

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

Chociaż ja osobiście wolę robić to tak:

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

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

})(jQuery); 

W ten sposób można tworzyć własne pakiety funkcjonalności bez obawy o złamanie inny kod narodów lub posiadające kod złamane przez luźne definicji zmiennych. Możesz także wywoływać zmienne, które przekazujesz wraz z dowolnymi nazwami, które chcesz i mają kod, który nie działa na przykład w stanie gotowości.

(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); 

Należy pamiętać, że są to te same

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

I że dokument nie posiada zdarzenie load

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