$ (Document) .ready è necessario?


111

Ho visto questa domanda in stackoverflow ma non mi sembra che abbia avuto una risposta.

È $(document).readynecessario?

Collego tutti i miei javascript in fondo alla pagina, quindi in teoria sono tutti in esecuzione dopo che il documento è pronto comunque.


3
I browser meno recenti potrebbero non godere del download parallelo utilizzato dai browser più recenti. Questo è il motivo principale per cui i tuoi script sono posizionati in fondo. In particolare, consente il rendering di HTML e CSS per primi sui browser meno recenti. A questo punto, puoi scegliere come vuoi ottenere il rilevamento che il DOM è caricato. Due metodi popolari per avviare il tuo js sono window.onload e $ (document) .ready (insieme a jQuery). Ci sono altre opzioni e facilmente ricercabili, ovvi svantaggi di window.onload. Il punto è $ (document) .ready funziona il più delle volte ed è facile da usare.
BradChesney79

Risposte:


125

È $(document).readynecessario?

no

se hai inserito tutti i tuoi script subito prima del </body>tag di chiusura, hai fatto esattamente la stessa cosa.

Inoltre, se lo script non ha bisogno di accedere al DOM, non importa dove viene caricato al di là delle possibili dipendenze da altri script.

Per molti CMS, non hai molta scelta di dove caricare gli script, quindi è una buona forma per il codice modulare utilizzare l' document.readyevento. Vuoi davvero tornare indietro ed eseguire il debug del vecchio codice se lo riutilizzi altrove?

fuori tema:

Come nota a margine: dovresti usare jQuery(function($){...});invece di $(document).ready(function(){...});come impone l'alias a $.


Sei sicuro che sia "la stessa identica cosa"? Avevo l'impressione che il tuo css (o altro codice caricato in parallelo con l'html principale) potesse non essere ancora completamente analizzato.
Zach Lysobey

6
@ZachL, il documento potrebbe essere pronto prima che CSS sia completamente analizzato. document.ready non è la stessa come l' onloadevento, dove le immagini e altre attività esterne hanno loading finito.
zzzzBov

Grazie per il chiarimento.
Zach Lysobey

5
Questo "no" mi è costato solo 3 ore di lavoro .. assicurati solo di non confondere </body> con <body> :)
teejay

1
Non sono necessariamente d'accordo con la forzatura dell'alias, soprattutto se noConflict()deve essere utilizzato per qualche motivo.
Jay Blanchard

22

No, se il tuo javascript è l'ultima cosa prima della chiusura non avrai bisogno di aggiungere quei tag.

Come nota a margine, una scorciatoia per $ (document) .ready è il codice sottostante.

$(function() {
// do something on document ready
});

Questa domanda potrebbe essere buona. L'hai letto? jQuery: Perché usare document.ready se JS esterno in fondo alla pagina?


6
La domanda è essenzialmente "Ho bisogno di un documento pronto quando metto i miei script in fondo al corpo?", Non "C'è una scorciatoia per scrivere $(document).ready()".
nnnnnn

4

No, non è necessario a condizione che tu sappia che non si verificano cose differite e nella maggior parte dei casi saprai se hai sviluppato ciò su cui stai lavorando dall'alto verso il basso.

- È quando inserisci il codice di qualcun altro, senza controllarlo a fondo, che non lo sai.

Quindi, chiediti se stai usando un framework o un editor che ti aiuta con la struttura? Stai portando il codice di qualcun altro e non ti sei preso la briga di leggere ogni file? Sei pronto a passare attraverso la matrice del sistema operativo, del browser e della versione del browser per testare il tuo codice? Hai bisogno di spremere ogni singolo grammo di velocità dal tuo codice?

document.ready () fa sì che molte di queste domande diventino irrilevanti. document.ready () è stato progettato per semplificarti la vita. Si tratta di un piccolo (e oserei dire accettabile) successo di prestazioni.


Solo qualcosa che ho visto: una delle tue modifiche è stata rifiutata, ma a me sembra a posto. Potresti ripresentarlo: stackoverflow.com/review/suggested-edits/3224385
Qantas 94 Heavy

1

Ho visto riferimenti / post di blog su Internet riguardo all'uso di jquery document.ready. Secondo me sono entrambi validi sia usarlo che mettere tutto il tuo javascript in fondo alla pagina. E ora la domanda sarebbe quale sarebbe meglio? È solo una questione di stile di programmazione.


0

No, non è necessario. Puoi inserire il tag dello script subito prima del tag di chiusura del corpo oppure, se stai supportando IE9 +, puoi utilizzare JS nativo.

<script>alert('DOM Loaded!');</script>
</body>

<script>
document.addEventListener("DOMContentLoaded", function(event) { 
      // DOM has loaded ready to fire JS scripts
    });
</script>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.