Comment pouvez-vous arrêter de navigateur à partir de 'hourglassing' lorsque le Javascript est FAIT (arrêt throbber)?

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

  •  06-09-2020
  •  | 
  •  

Question

Écrit une petite page web en HTML avec quelques très simple Javascript en elle, j'ai remarqué que lorsque cela fut fait, elle a gardé le cercle de filature (firefox).J'ai vu de nombreuses fois sur d'autres pages et j'ai toujours pensé que c'était une erreur de Javascript ou d'une boucle de problème, mais ce programme, j'étais en cours d'exécution était définitivement terminé.

Voici un exemple d'une petite page web qui fait cela.Après vous cliquez sur le bouton et qu'il traite, le throbber (merci pour Kooilinc pour le terme) continue à aller.

<!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>

J'ai été en mesure de l'arrêter en appuyant sur stop (droit de la souris et stop).

Que dois-je faire pour obtenir le Javascript pour arrêter le traitement (ou le navigateur de l'arrêt du traitement), une fois le script est fait?

Note1:Cela s'est produit dans FF4.01, pas sous IE ou Chrome (pour cet exemple de code).

Note2:J'ai essayé la fenêtre.fonction stop() après l'instruction switch, et il n'arrête pas de le throbber.

Comme par Lekensteyn réponse, document.close() après l'instruction switch résolu celui-ci, mais voici un exemple qui n'a pas palpiter à tous et n'utilisez pas de document.close().

<!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>
Était-ce utile?

La solution

Après l'appel de document.write(), vous devez appeler document.close() si le document n'a pas été fermé.

Fondamentalement, ce qui se passe:

  1. La page analysée
  2. Les Scripts sont traitées
  3. La Page est "fermé" (document.close())

Si document.write() dans l'étape 2, il sera terminé à l'étape 3.Au-delà de l'étape 3, si vous appelez document.write, vous êtes à l'ouverture de la page, mais la page ne se referment pas lui-même dans FF (pas sûr sur les autres).Vous avez de la fermer en appelant document.close().

J'ai découvert ça quand j'ai besoin d'ouvrir une fenêtre et de l'écriture en elle rapidement en FF.

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

La même chose s'applique à votre cas:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top