Ho problemi con gli eventi window.onload e document.onload. Tutto ciò che ho letto mi dice che questi non si attivano fino a quando il DOM non è completamente caricato con tutte le sue risorse, sembra che questo non stia accadendo per me:window.onload sembra attivarsi prima che il DOM sia caricato (JavaScript)
Ho provato la seguente semplice pagina in Chrome 4.1.249.1036 (41514) e IE 8.0.7600.16385 con lo stesso risultato: entrambi hanno visualizzato il messaggio "Fallito!", Indicando che myParagraph non è stato caricato (e quindi il DOM sembra incompleto).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<script type="text/javascript">
window.onload = doThis();
// document.onload gives the same result
function doThis() {
if (document.getElementById("myParagraph")) {
alert("It worked!");
} else {
alert("It failed!");
}
}
</script>
</head>
<body>
<p id="myParagraph">Nothing is here.</p>
</body>
</html>
Sono utilizzando script più complessi di questo, in un file .js esterna, ma questo illustra il problema. Posso farlo funzionare avendo window.onload impostato un timer per mezzo secondo per eseguire doThis(), ma questa sembra una soluzione poco elegante, e non risponde alla domanda sul perché window.onload non sembra fare cosa tutti dicono che lo fa. Un'altra soluzione sarebbe quella di impostare un timer che verificherà se il DOM è caricato, e in caso contrario si chiamerà solo mezzo secondo dopo (quindi continuerà a controllare fino a quando il DOM non sarà caricato), ma questo mi sembra troppo complesso. C'è un evento più appropriato da usare?
primo errore che vedo è che si assing [risultato della funzione] invece di [function] stessa.Riesci a vedere 'doThis()' è un'istruzione che ritorna indefinita dopo la valutazione perché 'doThis' non ha un operatore' return'. 'window.onload = doThis;' farà il lavoro. Nota: non ci sono parentesi – Dan
@DavidMason W3Schools è una scarsa fonte di informazioni. Non sono affiliati al W3C in alcun modo. * Non considerare * w3schools come una fonte autorevole di informazioni, trattandole nel modo in cui meritano di essere trattate: collegamenti fastidiosi che devi saltare quando cerchi un vero e proprio sito web di riferimento. – doug65536
@ doug65536 oggi sono completamente d'accordo. Raccomando w3fools.com per chiunque non sia sicuro. In questi giorni tendo a sviluppare developer.mozilla.org per informazioni di alta qualità, quindi eseguo una ricerca più ampia se non trovo quello che sto cercando lì (che è generalmente quando sto cercando di fare qualcosa di ridicolo). Sono abbastanza imbarazzato dal fatto che il passato ... me l'abbia postato ... ma posso cancellarlo! Lì, un riferimento meno ingenuo a w3schools su Internet :) Grazie per averlo individuato. –