2013-04-15 36 views
0

我有两个JS函数:一个显示进度条的load()函数和一个加载页面后停止执行加载的kill()函数。 现在,当加载另一个页面时,不会显示进度条,因为知道每个页面上都会调用加载函数。 任何有关问题出现的提示以及是否有解决问题的方法。阻止另一个JS函数的JS函数

这里是我的代码:

<script type="text/javascript"> 
    var count=0; 
    function load(i) { 
     j = parseInt(i); 
     document.getElementById("progressBar").style.display = "block"; 
     count=count+1; 
     if (document.all) { 
      document.all.btn1.value=count+'%'; 
      document.all.progressbar.pic1.width=2*count; 
     } 
     else { 
      document.getElementById("pic1").width=2*count; 
      document.getElementById("bar").width=count+'%'; 
     } 
     if (count<100) { 
      setTimeout('load(j)',j); 
     } 
     if(count==100) { 
      document.getElementById("progressBar").style.display = "none"; 
      count=0; 
     } 
    } 

    function kill(){ 
     if (document.applets[0].isActive()) { 
      document.getElementById("progressBar").style.visibility = "hidden"; 
     } 
    } 

</script> 

预先感谢您!

回答

1

load()你改变显示block,但在kill()设置知名度hidden;您应该将display改为none,因此下次可以正确设置为blockRead about visibility

优化代码:

<script type="text/javascript"> 
    var count = 0, 
     win = window, 
     doc = document, 
     progressBar = doc.getElementById("progressBar"), 
     t, j; 

    function load(i) { 
     j = parseInt(i); 
     progressBar.style.display = "block"; 
     count++; 

     // no actual need to check if doc.all is available 
     // just select through id 
     doc.getElementById("pic1").style.width = 2*count; 
     doc.getElementById("bar").style.width = count+'%'; 

     if (count < 100) { 
      t = win.setTimeout('load(j)',j); 
     } else { 
      progressBar.style.display = "none"; 
      win.clearTimeout(t); 
      count = 0; 
     } 
    } 

    function kill(){ 
     if (doc.applets[0].isActive()) { 
      progressBar.style.display = "none"; 
     } 
    } 

</script> 
+0

谢谢您的回答。你是对的,通过使用“none”值,每个页面都显示进度条,但是kill函数仍然无法正常工作:加载页面时,进度条显示进度。我一直试图找出如何使页面加载后消失。我添加了clearTimeout(),但它不影响进度条。任何建议将不胜感激。谢谢。 – user2275278

+0

问题解决了。我必须在kill()中添加clearTimeout。现在一切正常。谢谢。 – user2275278

0

如果分配setTimeout给一个变量,你可以用clearTimeout它来阻止它。
例如 设定 t = setTimeout('load(j)',j); 超时然后用 clearTimeout(t);阻止它让我知道是否有帮助,而且是有道理的:)

+0

谢谢你的回复。我曾尝试从先前的答案clearoutout,但我仍然看到加载页面时的进度栏。有没有其他方法杀死JS函数?感谢您的帮助。 – user2275278

+0

问题解决了。我必须在kill()中添加clearTimeout。现在一切正常。谢谢。 – user2275278