2012-05-01 11 views
18

Se sto caricando i miei script jQuery sotto tutta la mia pagina HTML, devo ancora aspettare che $(document).ready sia in grado di usare jQuery per trovare elementi nella pagina?

+0

"Tecnicamente", sì - "praticamente", no. Questo comportamento è stato costante (non definito) per i browser per anni. Tuttavia, credo che potrebbe esserci un po 'di magia con 'ready' e frame in IE ... lo script dovrebbe essere * dentro * il tag body. –

+0

Inoltre, "piè di pagina" significa "

" o alla fine di "" o ...? –

+0

Alla fine del '' –

risposta

1

non è necessario utilizzare la funzione ready di jQuery, ma il proprio codice dovrebbe essere scritto con questo in mente. Eventuali click o di altri gestori basati su BIND non possono allegare ai selettori in modo corretto, tuttavia, altri come live e $.ajax possono funzionare come previsto.

Prestare attenzione quando si utilizzano caricatori di script o AMD utilizzando questo approccio. jQuery deve essere disponibile e si deve bloccare durante il caricamento. Carica jQuery e altri deps in testa.

Un grande sguardo a questa tecnica che descrive che questo non è necessario l'utilizzo di jQuery per la funzione (non necessariamente circa l'uso in piè di pagina):

http://encosia.com/dont-let-jquerys-document-ready-slow-you-down/

+1

Perché "click" (o selettori) non funziona? –

+0

(che puntano parla di utilizzo di script in una testa-posizione, ma non un FOOT-position.) –

+0

Sarebbe lavorare per qualsiasi cosa disponibile nel DOM prima dell'esecuzione. Tutto ciò caricato in seguito, con qualsiasi mezzo, come AJAX o aggiunto in una successiva modifica documento non sarebbe stato raccolto da jQuery del 'click' – philwinkle

5

No non è necessario $(document).ready per qualsiasi codice che interagisce con gli elementi DOM sulla pagina se gli script sono posizionati sotto questi elementi.

È buona norma metterli prima del tag di chiusura </body>.

+0

Il tag HTML ha solo due figli validi, testa e corpo, quindi probabilmente direi che è più che una buona pratica mettere i tag script all'interno del tag body di chiusura. I parser possono essere strani con HTML non valido – Hazza

5

No perché il documento sarebbe già stato caricato. Il Dom carica dall'alto verso il basso. Personalmente mi piace mettere tutte le mie js in fondo alla pagina invece che nella testa.

tuttavia è solo una riga di codice e suggerirei di utilizzarlo solo per sicurezza. puoi anche renderlo ancora più corto. $(function() {} è lo stesso di $(document).ready(function(){})

+1

Non capisco perché dovresti usarlo solo per essere sicuro; sembra che rallenterebbe inutilmente l'esecuzione. –

+0

perché ci sarà sempre qualcuno con una configurazione del browser che fallirà se non vedrà ciò che vuole o si aspetta. l'esecuzione di '$ (function() {}' una volta non rallenta le cose abbastanza a sufficienza per te. guarda http://stackoverflow.com/questions/8160014/document-ready-check-slows-down-ie e leggi i commenti per la risposta accettata usando '$ (function() {}' richiederà in media circa 2-3ms. su una nota a margine se usi php puoi fare una funzione o una classe per inserire tutti i js in 1 file in 1 '$ (function() {}' oppure puoi farlo in js per esaminare i pattern di progettazione di programmazione. – Yamiko

Problemi correlati