JS函数停止另一个JS函数

时间:2013-04-15 09:25:26

标签: javascript

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

这是我的代码:

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

提前谢谢!

2 个答案:

答案 0 :(得分:1)

load()中,您将显示更改为block,但在kill()中,您将可见性设置为hidden };您应该将显示设置为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>

答案 1 :(得分:0)

如果您将setTimeout指定给变量,则可以使用clearTimeout来阻止它 例如。 设置超时 t = setTimeout('load(j)',j); 然后用它来阻止它 clearTimeout(t);如果有帮助,请告诉我,并且有道理:)