循环后的Javascript未定义变量

时间:2012-04-19 11:06:39

标签: javascript html variables loops

我有一个倒计时脚本,可以重定向到一个文件。它有一个循环,当变量运行一次时变量就会被解开。

如何保持url变量保持其值?

        <a id="" onClick="doTimer('http://www.domain.com/downloadfile.php?photo=foo.jpg')" href="#"><button id="download">Download this photo</button></a>

        var timer_is_on=0;
        var countdownfrom=5
        var currentsecond=document.getElementById('countdown').innerHTML=countdownfrom+1 

        function countredirect(url)
        { 
            if (currentsecond!=1)
            {
                currentsecond-=1 
                document.getElementById('countdown').innerHTML = currentsecond;
            } 
            else
            { 
                window.location=url 
                return 
            } 
            setTimeout("countredirect()",1000) 
        }
        function doTimer(url)
        {
            if(!timer_is_on)
            {
                document.getElementById('download').innerHTML="Your download starts in <span id=\"countdown\"></span>seconds";
                timer_is_on=1;
                countredirect(url) 
            }
        }

2 个答案:

答案 0 :(得分:5)

setTimeout("countredirect()",1000)

您没有将任何参数传递给countredirect函数。

将字符串传递给setTimeoutsetInterval通常是一个坏主意(给你各种范围问题)。传递一个函数:

setTimeout(function() {
    countredirect(url);
}, 1000);

在较新的浏览器中(或使用shim),您也可以使用.bind() [MDN]bind返回新功能):

setTimeout(countredirect.bind(null, url), 1000);

答案 1 :(得分:0)

重新安排功能的另一种方法:

setTimeout(countredirect.bind(null, url), 1000);