当Javascript完成时(停止悸动),如何阻止浏览器进入“沙漏”?

时间:2011-05-20 05:54:12

标签: javascript browser throbber

在其中编写一个包含一些非常简单的Javascript的小型HTML网页,我注意到它完成之后,它使圆圈保持旋转(firefox)。我已经在其他页面上多次看到并且一直认为这是一个Javascript错误或循环问题,但我运行的这个程序肯定已经完成。

以下是执行此操作的小型网页的一个示例。单击按钮并进行处理后,throbber(感谢Kooilinc的任期)继续进行。

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

我能够通过点击停止(右键单击并停止)来阻止它。

在脚本完成后,我需要做些什么才能让Javascript停止处理(或浏览器停止处理)?

注1:这发生在FF4.01中,而不是在IE或Chrome中(对于此代码示例)。

注意2:我在switch语句之后尝试了window.stop()函数,并没有阻止throbber。

根据Lekensteyn的回答,在switch语句解决了这个问题之后,document.close()会解决这个问题,但这里有一个根本没有悸动的例子,并且没有使用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>

1 个答案:

答案 0 :(得分:1)

致电document.write()后,如果之前未关闭该文件,则必须致电document.close()

基本上,这种情况发生了:

  1. 正在解析该页面
  2. 处理脚本
  3. Page已“关闭”(document.close()
  4. 如果在步骤2中调用了document.write(),它将在步骤3中完成。 除了第3步之外,如果您拨打document.write,则会再次打开该页面,但该页面不会在FF中关闭(不确定其他页面)。您可以通过拨打document.close()来关闭它。

    当我需要打开一个窗口并在FF中快速写入时,我发现了这一点。

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

    同样适用于您的情况:

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