Kiedy powinienem użyć dokumentu jQuery.gotowa funkcja?

Kazano mi użyć dokumentu.gotowy, kiedy po raz pierwszy zacząłem używać Javascript / jQuery, ale tak naprawdę nigdy nie dowiedziałem się dlaczego.

Może ktoś podać podstawowe wskazówki, kiedy warto zawinąć kod javascript / jquery w document.ready jQuery?

Niektóre tematy, które mnie interesują:

  1. jQuery ' s .on() Metoda: używam metody .on() dla AJAX dość dużo(zazwyczaj na dynamicznie tworzonych elementach DOM). Należy .on() klikać zawsze be inside document.ready?
  2. wydajność: czy bardziej wydajne jest trzymanie różnych obiektów javascript / jQuery wewnątrz lub Na Zewnątrz dokumentu.ready (również, czy różnica w wydajności jest znacząca?)?
  3. zakres obiektu: strony załadowane Ajaxem nie mogą uzyskać dostępu do obiektów, które były wewnątrz dokumentu poprzedniej strony.gotowy, zgadza się? Mają dostęp tylko do obiektów, które były poza dokumentem.gotowe (czyli prawdziwie "globalne" obiekty)?

Update: aby postępować zgodnie z najlepszą praktyką, cały mój javascript (biblioteka jQuery i Kod mojej aplikacji) znajduje się na dole mojej strony HTML i używam atrybutu defer na skryptach zawierających jQuery na moich stronach załadowanych Ajaxem, dzięki czemu mogę uzyskać dostęp do biblioteki jQuery na tych stronach.

Author: tim peterson, 2012-10-25

8 answers

W prostych słowach,

$(document).ready jest zdarzeniem, które się uruchamia, gdy document jest gotowy.

Załóżmy, że umieściłeś swój kod jQuery w sekcji head i próbujesz uzyskać dostęp do elementu dom (anchor, img itp.), nie będziesz w stanie uzyskać do niego dostępu, ponieważ html jest interpretowany od góry do dołu, a twoje elementy html nie są obecne podczas uruchamiania kodu jQuery.

Aby rozwiązać ten problem, umieszczamy każdy kod jQuery / javascript (który używa DOM) wewnątrz $(document).ready funkcja, która jest wywoływana, gdy dostępne są wszystkie elementy dom.

I to jest powód, kiedy umieszczasz kod jQuery na dole (po wszystkich elementach dom, tuż przed </body>) , nie ma potrzeby $(document).ready

Nie ma potrzeby umieszczania metody on wewnątrz $(document).ready tylko wtedy, gdy używasz metody on na document z tego samego powodu, co wyjaśniłem powyżej.

    //No need to be put inside $(document).ready
    $(document).on('click','a',function () {
    })

    // Need to be put inside $(document).ready if placed inside <head></head>
    $('.container').on('click','a',function () {
    });

EDIT

Z komentarzy,

  1. $(document).ready nie poczekaj na obrazy lub skrypty. To jest duża różnica między $(document).ready A $(document).load

  2. Tylko kod, który ma dostęp do DOM, powinien być w ready handler. Jeśli jest to wtyczka, nie powinna być w zdarzeniu ready.

 145
Author: Jashwant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-22 18:13:43

Odpowiedzi:

JQuery ' s .metoda on (): używam .metoda on () dla AJAX (dynamiczne tworzenie elementów DOM). Powinien .on () click handlers zawsze bądź wewnątrz dokumentu.gotowy?

Nie, Nie zawsze. Jeśli załadujesz JS w nagłówku dokumentu, będziesz musiał. Jeśli tworzysz elementy po załadowaniu strony przez AJAX, będziesz musiał. Nie będziesz musiał, jeśli skrypt znajduje się poniżej elementu html, który dodajesz.

Wydajność: czy jest bardziej wydajne, aby zachować różne javascript / jQuery obiekty wewnątrz lub na zewnątrz dokumentu.ready (również, czy różnica w wydajności jest znacząca?)?

To zależy. Dołączenie programów obsługi zajmie tyle samo czasu, zależy tylko od tego, czy chcesz, aby stało się to natychmiast po załadowaniu strony lub czy chcesz, aby czekało, aż cały dokument zostanie załadowany. Więc to zależy, jakie inne rzeczy robisz na stronie.

Zakres obiektu: Strony załadowane Ajaxem nie mają dostępu do obiektów znajdujących się wewnątrz dokument poprzedniej strony.gotowy, zgadza się? Mają dostęp tylko do obiektów które były poza dokumentem.gotowe (czyli prawdziwie "globalne" obiekty)?

Jest w zasadzie własną funkcją, więc może uzyskać dostęp tylko do zmiennych zadeklarowanych w globalnym zasięgu (poza / ponad wszystkimi funkcjami) lub z window.myvarname = '';

 7
Author: Justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-25 05:51:56

Zanim będziesz mógł bezpiecznie korzystać z jQuery, musisz upewnić się, że strona jest w stanie, w którym jest gotowa do manipulacji. Dzięki jQuery osiągamy to poprzez umieszczenie naszego kodu w funkcji, a następnie przekazanie tej funkcji do $(document).ready(). Funkcja, którą przekazujemy może być po prostu funkcją anonimową .

$(document).ready(function() {  
    console.log('ready!');  
});

To uruchomi funkcję, którą przekazujemy .ready() gdy dokument jest gotowy. Co tu się dzieje? Używamy $(document) do utworzenia obiektu jQuery z naszego dokument page' a, a następnie wywołanie .funkcja ready () na tym obiekcie, przekazując jej funkcję, którą chcemy wykonać.

Ponieważ jest to coś, co często robisz, istnieje na to metoda skrótu, jeśli wolisz - funkcja $ () pełni podwójną funkcję jako alias dla $(document).ready() jeśli przekażesz mu funkcję:

$(function() {  
    console.log('ready!');  
});  

To jest dobra lektura: jQuery Fundamentals

 6
Author: Tom Sarduy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-18 00:50:29

.gotowe() - określa funkcję do wykonania, gdy DOM jest w pełni załadowany.

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

Oto lista wszystkie metody jQuery

Czytaj dalej przedstawiamy $(dokument).gotowe()

 3
Author: Dipak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-25 05:44:54

Aby być realistycznym, document.ready nie jest potrzebny do niczego innego niż dokładne manipulowanie DOM i nie zawsze jest potrzebny lub najlepszym rozwiązaniem. Chodzi mi o to, że kiedy rozwijasz dużą wtyczkę jQuery, na przykład, prawie nie używasz jej w całym kodzie, ponieważ próbujesz utrzymać ją suchą, więc abstrakujesz jak najwięcej w metodach, które manipulują domem, ale mają być wywoływane później. Gdy cały kod jest ściśle zintegrowany, jedyną metodą document.ready jest zwykle init, gdzie cała magia DOM się zdarza. Mam nadzieję, że to odpowie na twoje pytanie.

 3
Author: elclanrs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-25 05:52:34

Należy powiązać wszystkie działania w dokumencie.gotowe, ponieważ należy poczekać aż dokument zostanie w pełni załadowany.

Należy jednak utworzyć funkcje dla wszystkich akcji i wywołać je z poziomu dokumentu.gotowy. Gdy tworzysz funkcje (obiekty globalne), wywołaj je, kiedy tylko chcesz. Po załadowaniu nowych danych i utworzeniu nowych elementów ponownie wywołaj te funkcje.

Te funkcje są tymi, w których zostały powiązane zdarzenia i elementy akcji.

$(document).ready(function(){
bindelement1();
bindelement2();
});

function bindelement1(){
$('el1').on('click',function...);
//you might make an ajax call here, then under complete of the AJAX, call this function or any other function again
}

function bindelement2(){
$('el2').on('click',function...);
}
 1
Author: Pulkit Mittal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-25 05:47:48

Dodałem link do div I chciałem wykonać kilka zadań po kliknięciu. Dodałem kod pod dołączonym elementem w DOM, ale nie zadziałał. Oto kod:

<div id="advance-search">
   Some other DOM elements
   <!-- Here I wanted to apppend the link as <a href="javascript:;" id="reset-adv-srch"><span class="bold">x</span> Clear all</a>-->
</div>

<script>
  $("#advance-search #reset-adv-srch").on("click", function (){
     alert('Link Clicked');``
  });
</script>
Nie zadziałało. Następnie umieściłem kod jQuery w $(document).gotowy i działał idealnie. Tutaj jest.
$(document).ready(function(e) {
    $("#advance-search #reset-adv-srch").on("click", function (){
        alert('Link Clicked');
    });
});
 0
Author: Safeer Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-25 06:37:09

Zdarzenie he ready występuje po załadowaniu DOM (document object model).

Ponieważ to zdarzenie występuje po przygotowaniu dokumentu, jest to dobre miejsce, aby mieć wszystkie inne zdarzenia i funkcje jQuery. Jak w powyższym przykładzie.

Metoda ready() określa, co się stanie, gdy wystąpi zdarzenie ready.

Wskazówka: metoda ready() nie powinna być używana razem z .

 -2
Author: Shrikant Shiledar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-19 08:35:22