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

文字列をsetTimeoutandに渡すことsetIntervalは、一般的に悪い考えです (あらゆる種類のスコープの問題が発生します)。代わりに関数を渡します。

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

.bind() 新しいブラウザー (または shim を使用) では、 [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 に答える