2013-05-08 11 views
6

Ho appena iniziato a imparare javascript da w3school e ho scoperto che "È possibile utilizzare solo document.write nell'output HTML. il documento è stato caricato, l'intero documento verrà sovrascritto. " così ho cercato di scrivere codice seguente per verificare la validità:Perché javascript non si sta caricando per document.readyState === "completato"

<html> 
    <head> 
     <title>ashish javascript learning</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
     <p> sample html with javascript </p> 
     <script> 
      document.write("<h1>this is heading</h1>"); 
      document.write("<p>this is sample para</p>"); 
     </script> 
     <script> 
      if(document.readyState === "complete"){ 
       loaded(); 
      } 
      function loaded(){ 
       document.write("<p>loading content after the document has been loaded"); 
      } 
     </script> 
    </body> 
</html> 

codice è ancora mostrando il vecchio valore e non sovrascrive il contenuto della pagina web. Potresti suggerirmi cosa sto facendo male?

+3

Perché stai usando 'document.write'? –

+4

@Ashish: una delle risorse JavaScript attendibili sarebbe il [** JavaScript MDN **] (https://developer.mozilla.org/en/docs/JavaScript) che ha un sacco di link a buone risorse e guide. – Nope

+1

Fondamentalmente ogni chiamata 'document.write' continua ancora durante la creazione iniziale della pagina. La parte 'if' valuterà solo' false' e ​​'loaded()' non verrà mai chiamata. – devnull69

risposta

12

Al momento si sta testando document.readyState === "complete", readyState del documento non è "completa", è "carico", in modo da non succede nulla, e loaded non è mai chiamato.

È possibile ascoltare per la readyState di cambiare, e poi di controllo per vedere se è "completo" (o ascoltare window.onload che è più facile):

document.onreadystatechange = function() { 
    if(document.readyState === "complete"){ 
    loaded(); 
    } 
} 
+0

se il mio documento è popup con il pdf da scaricare che viene generato, il popup si apre e si trova in stato di pronto completo ma il file non è ancora stato caricato, puoi consigliare grazie. – shareef

4

Poiché il meccanismo è basato su eventi. Dovresti usarlo solo una volta che il DOM viene effettivamente caricato, quindi è inutile.

La valutazione viene eseguita, ma al momento della valutazione document.readyState == "complete" è false, quindi non accade nulla.

Il modo più semplice per fare le cose:

window.onload = function() { 
    loaded(); 
}; 
3

Quello che dovete fare è collegare una funzione al readystatechange evento poi assegno per il valore readystate.

document.onreadystatechange = function() { 
    if (document.readyState === 'complete') { 
     initApplication(); 
    } 
} 
0

scrittura come questo, si otterrà il risultato desiderato

document.onreadystatechange = function(){ 
    if(document.readyState == 'complete'){ 
     document.write('document is overwrite') 
    } 
} 
+0

potresti spiegare perché? solo dare una risposta senza spiegazioni di sorta non è costruttivo e non risponde alla parte Perché della domanda – glls

0

dispiace per alcuna spiegazione; quando il codice viene eseguito su javascript, la dom non è completata, quindi il readyState del documento non è 'completo', quindi la funzione initApplication non verrà chiamata; Se si desidera chiamare la funzione initApplication, è necessario aggiungere un trigger al documento. Aggiungere un trigger come "document.onreadystatechange". "Document.onreadystatechange" verrà chiamato quando lo stato del documento viene modificato; in modo che quando il documento viene caricato, la "document.onreadystatechange" sarà chiamato

Problemi correlati