如何阻止浏览器从';沙漏';Javascript完成时(停止跳动)?

如何阻止浏览器从';沙漏';Javascript完成时(停止跳动)?,javascript,browser,throbber,Javascript,Browser,Throbber,在编写一个包含一些非常简单的Javascript的小HTML网页时,我注意到,在编写完成之后,它使循环不断旋转(firefox)。我在其他页面上看到过很多次,总是认为这是一个Javascript错误或循环问题,但我运行的这个程序肯定完成了 下面是一个小web页面的示例。单击按钮并进行处理后,throbber(感谢Kooilink提供的术语)将继续运行 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/

在编写一个包含一些非常简单的Javascript的小HTML网页时,我注意到,在编写完成之后,它使循环不断旋转(firefox)。我在其他页面上看到过很多次,总是认为这是一个Javascript错误或循环问题,但我运行的这个程序肯定完成了

下面是一个小web页面的示例。单击按钮并进行处理后,throbber(感谢Kooilink提供的术语)将继续运行

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

等级测试仪
函数计算()
{
var grade=document.getElementById(“grade”).value.toUpperCase();
道岔(坡度)
{
案例“A”:
文件。书写(“杰出成就”);
打破
案例“B”:
书面记录(“高于平均水平”);
打破
案例“C”:
记录。书写(“平均成绩”);
打破
案例“D”:
书面记录(“低及格分数”);
打破
案例“F”:
文件。填写(“不合格等级”);
打破
}
}
等级:

我可以通过点击“停止”(右键单击并停止)来停止它

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

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

注2:我在switch语句之后尝试了window.stop()函数,但它没有停止throbber

根据Lekensteyn的回答,switch语句之后的document.close()解决了这个问题,但这里有一个示例,它一点也不跳动,也不使用document.close()


实验9.1
var phrase=“每一个好男孩都做得很好。”
文件。书写(短语。长度+“
”); 对于(var i=0;i”); document.write(短语.toLowerCase()+“
”); document.write(短语.toUpperCase()+“
”);
调用
document.write()
后,如果以前未关闭文档,则必须调用
document.close()

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

  • 正在对该页进行分析
  • 脚本被处理
  • 页面已“关闭”(
    document.close()
  • 如果在步骤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>
    
    
    函数计算()
    {
    var grade=document.getElementById(“grade”).value.toUpperCase();
    道岔(坡度)
    {
    案例“A”:
    文件。书写(“杰出成就”);
    打破
    //删除了一些案例
    案例“F”:
    文件。填写(“不合格等级”);
    打破
    }
    //完成文件
    document.close();
    }
    

    @Dr.Molle,这就是为什么我在问题中如此明确地说它有多简单,这样人们就可以在逻辑上假设最小的javascript,然后回答这个问题。我不在电脑前编写代码,也不能给出示例,这不重要。就连班上的老师都说,javascript完成后浏览器继续运行是很平常的事,但他也不知道如何停止。你是否只对firefox或其他浏览器有问题?你的问题也不具体,到目前为止,你要的是水晶球。如果使用document.open()方法而不在最后关闭打开的文档,则大多数描述的行为都会出现,但这只能是猜测,而不知道任何细节。有一个函数窗口。请参见此处。但如果您希望页面的所有内容都必须加载,则不确定它应该放在哪里。@Lance Roberts:这里有一些代码供您使用:
    document.close()
    document.write()加载文档后执行会打开一个文档,因此write()后此文档需要close()。见我10小时前的评论。另外请看:如果您在开始时发布了代码,这个问题在2或3分钟后就解决了。好的,但我有其他使用document.write()的示例,它们没有document.close(),但仍然不会跳动(尽管在本例中它确实解决了问题)。在这些情况下,页面仍在加载,文档树尚未完成:
    document.write(“X”);函数f(){document.write(“Y”)}write Y
    @LanceRoberts:该示例与我在上一篇评论中提供的代码类似,文档仍在加载中,整个文档(HTML,而不是像媒体一样的图像)尚未完全解析。@Lekensteyn,但我说的恰恰相反,第二个示例从不跳动,它只是停止而没有关闭()@Lekensteyn,所以这是一个时间问题,我只需要确保并关闭所有文档,因为它不是完全确定的。
    <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>