重新开始setTimeout前最好先清除之前的计时函数...
if(document.getElementById("hidIsShow").value == "true")
   {
     var t = document.getElementById("hidTimeOut").value;
     clearTimeout(objTime); // 这上这句
     objTime = setTimeout("ShowMsg()",parseInt(t,10) * 60 * 1000); //这里你调用的setTimeout所在函数,这是一个类似递归的循环; 在这之前要清除之前的 objTime否则会有N个递归在运行...
   }
   else
   {
     clearTimeout( objTime );
     objTime = null;
     msg = null;
     CollectGarbage();
   }

解决方案 »

  1.   

    上边理解的有点问题 setTimeout只运行一次这样不会是大问题
    我想问题在你的AjAx (GetXmlHttpResult)
    新的setTimeout调用 ShowMsg() 的时候可以上次调用后请求的结果还没有反回来, 这样就会重复请求后台页面, 造成资源占用...我见你在第一次返回结果后设计了一个 value值为true(证明请求完成吧?)是不是在重新请求前重置这个value为false什么的
    这样if(document.getElementById("hidIsShow").value == "true")
       {
         var t = document.getElementById("hidTimeOut").value;
        document.getElementById("hidIsShow").value = "false"); // 这里是后加的
         objTime = setTimeout("ShowMsg()",parseInt(t,10) * 60 * 1000); 
       }
       else
       {
         clearTimeout( objTime );
         objTime = null;
         msg = null;
         CollectGarbage();
       }
      

  2.   

    上贴多了个右括号document.getElementById("hidIsShow").value = "false"; // 这里是后加的
      

  3.   

    我做的是一个OA的弹出提示框
    用XMLHTTP取要弹出的信息.如果有信息就会弹出
    var num = v.substring( 0, v.indexOf( "<" ) )
    取出信息条数,如果大于0就弹出
    if(document.getElementById("hidIsShow").value == "true")
    只是判断是不是要弹出窗口
    如果用户设置了不弹出窗口,就算有信息提示也不会弹出
      

  4.   

    光设成null是不行的.
    delete obj;