Non potrebbero esserci potenziali problemi se un utente invia un input a un evento del mouse o un evento di tastiera prima che l'intera pagina sia stata renderizzata? [questo paragrafo] si riferisce a uno script non utilizzando .ready()
In generale, se si desidera fare riferimento ad un elemento da JavaScript l'elemento in questione deve essere già stata analizzata, vale a dire, aggiunto alla Albero DOM. Questo vale sia che tu stia cercando di collegare un gestore di eventi (con o senza jQuery), cambiare le sue impostazioni CSS, o qualsiasi altra cosa.
Il gestore .ready()
non aspetta che l'intera pagina sia resi, attende per la pagina di essere "pronto" per la manipolazione JS, nel senso che è stato analizzato e tutto l'albero DOM ha stato costruito A quel punto potrebbe ancora verificarsi il rendering, ad es. Il contenuto effettivo degli elementi dell'immagine potrebbe ancora essere scaricato solo parzialmente.
Tuttavia, è possibile iniziare a manipolare gli elementi da JavaScript prima (o senza) la .ready()
il tempo che farlo in un blocco di script che è incluso dopo l'elemento (s) in questione nella pagina fonte, poiché il browser esegue l'analisi dall'alto verso il basso dalla sorgente html. Un esempio:
<input type="text" id="input1">
<script>
// following will work, because "input1" already exists
$("#input1").change(function() { /* do something */ });
// following will NOT work, because "input2" has not been parsed yet
$("#input2").change(function() { /* do something */ });
</script>
<input type="text" id="input2">
Quindi, se per qualche motivo avete qualche pezzo critico di funzionalità che si sente assolutamente necessario impostare prima.ready()
si può fare qualcosa di simile a quanto sopra.
Si noti inoltre che non è necessario la funzione .ready()
affatto se si include lo script sul fondo del corpo, perché (come con .ready()
) a quel punto saranno stati analizzati tutti gli elementi.
Dove si do è necessario .ready()
è per codice in un file JS esterno se non si è sicuri di dove nella pagina verrà incluso il file. Se è incluso nella sezione <head>
, verrà eseguito prima che il resto del documento venga analizzato, quindi è necessario utilizzare .ready()
.
Il tuo secondo paragrafo lo riporta all'indietro. Questo è esattamente ciò che document.ready impedisce di accadere. – Sparky
Il mio secondo paragrafo si riferisce a uno script ** NON ** utilizzando '.ready()' – user784637
Quindi è necessario ampliare e migliorare la formattazione della domanda per spiegare ulteriormente. Una pagina costruita correttamente non sarà in grado di eseguire eventi o input del mouse prima che il DOM sia completamente caricato. Quando si utilizza jQuery, document.ready è fondamentale per facilitare questo. – Sparky