Wie verhinderst du, dass der Browser 'Sanduhr' macht, wenn Javascript fertig ist (stoppe Throbber)?

StackOverflow https://stackoverflow.com/questions/6067976

  •  06-09-2020
  •  | 
  •  

Frage

Als ich eine kleine HTML-Webseite mit sehr einfachem Javascript schrieb, bemerkte ich, dass sich der Kreis nach dem Abschluss weiter drehte (Firefox).Ich habe das schon oft auf anderen Seiten gesehen und dachte immer, dass es sich um einen Javascript-Fehler oder ein Schleifenproblem handelt, aber dieses Programm, das ich ausgeführt habe, war definitiv fertig.

Hier ist ein Beispiel für eine kleine Webseite, die dies tut.Nachdem Sie auf die Schaltfläche geklickt haben und sie verarbeitet wird, läuft der Throbber (danke für Kooilinc für den Begriff) weiter.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>Grade Tester</title>
    <script language="javascript" type="text/javascript">       
      function calculate()
      {
       var grade = document.getElementById("grade").value.toUpperCase();        
        switch (grade)
        {
         case "A":
           document.write("Outstanding Achievement");
           break;

         case "B":
           document.write("Above Average");
           break;

         case "C":
           document.write("Average Achievement");
           break;

          case "D":
            document.write("Low Passing Grade");
           break;

         case "F":
           document.write("Failing Grade");
            break;
        }
      }
    </script>       
    </head>
  <body>
    Grade:<input type="text" id="grade" />
    <br /><input type="button" value="Get Result" onclick="calculate()" />
  </body>
</html>

Ich konnte es stoppen, indem ich Stopp drückte (Rechtsklick und Stopp).

Was muss ich tun, damit Javascript die Verarbeitung stoppt (oder der Browser die Verarbeitung stoppt), nachdem das Skript fertig ist?

Anmerkung1:Dies geschah in FF4.01, nicht in IE oder Chrome (für dieses Codebeispiel).

Anmerkung2:Ich habe das Fenster ausprobiert.stop () -Funktion nach der switch-Anweisung, und es hat den Throbber nicht gestoppt.

Gemäß Lekensteyns Antwort, Dokument.close() nachdem die switch-Anweisung dieses Problem gelöst hat, aber hier ist ein Beispiel, das überhaupt nicht pochte und kein Dokument verwendet.schließen().

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>Lab 9.1</title>
  </head>
  <body>
    <script language="javascript" type="text/javascript">
      var phrase = "Every good boy does fine goes on the line."
      document.write(phrase.length + "<br />");
      for(var i = 0; i < phrase.length; i++)
      {
        document.write(phrase.charCodeAt(i) + " ");
      }
        document.write("<br />");
        document.write(phrase.toLowerCase() + "<br />");
        document.write(phrase.toUpperCase() + "<br />");
    </script>
  </body>
</html>
War es hilfreich?

Lösung

Nach dem Anruf document.write(), du musst anrufen document.close() wenn das Dokument zuvor nicht geschlossen wurde.

Grundsätzlich passiert das:

  1. Die Seite wird analysiert
  2. Skripte werden verarbeitet
  3. Seite ist "geschlossen" (document.close())

Wenn document.write() wird in Schritt 2 aufgerufen, wird es in Schritt 3 beendet.Über Schritt 3 hinaus, wenn Sie anrufen document.write, Sie öffnen die Seite erneut, aber die Seite schließt sich in FF nicht von selbst (bei anderen nicht sicher).Sie müssen es schließen, indem Sie anrufen document.close().

Ich habe das entdeckt, als ich ein Fenster öffnen und schnell in FF hineinschreiben musste.

var win = window.open();
win.document.write("something");
// the next line is required to finish the page
win.document.close();

Gleiches gilt für Ihren Fall:

<script type="text/javascript">
function calculate()
{
    var grade = document.getElementById("grade").value.toUpperCase();
    switch (grade)
    {
    case "A":
        document.write("Outstanding Achievement");
        break;
    // removed some cases
    case "F":
        document.write("Failing Grade");
        break;
    }
    // finish the document
    document.close();
}
</script>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top