0

我有一个重定向到文件的倒计时脚本。它有一个循环,并且当它运行一次时变量会变得未定义。

我怎样才能让 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) 
            }
        }
4

2 回答 2

5
setTimeout("countredirect()",1000)

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

将字符串传递给setTimeoutandsetInterval通常是一个坏主意(给您带来各种范围问题)。而是传递一个函数:

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

在较新的浏览器(或使用 shim)中,您还可以使用.bind() [MDN]bind返回一个新函数):

setTimeout(countredirect.bind(null, url), 1000);
于 2012-04-19T11:10:11.150 回答
0

重新安排函数的另一种方法:

setTimeout(countredirect.bind(null, url), 1000);
于 2012-04-19T11:11:46.397 回答