0

残りの秒数と支払わなければならない価格の両方を調整する JS カウントダウン スクリプトを作成しようとしていました。

例: 5秒後にリダイレクトされます。または、ここをクリックして150を支払うと、すぐにリダイレクトされます。

つまり、1 秒あたり 30 の仮想コインです。

私はすでにそれを作ろうとしましたが、私はJSが苦手です。

それで、私が試したこと(インターネットで見つかった他のコードをコピー/貼り付けることによって):

<script type="text/javascript">
function countDown(secs,elem) {
    var element = document.getElementById(elem);
    element.innerHTML = "Please wait for "+secs+" seconds";
    if(secs < 1) {
        clearTimeout(timer);
        location.href='mywebpage.php';
    }
    secs--;
    var timer = setTimeout('countDown('+secs+',"'+elem+'")',1000);

        timeout = 4;
        if(document.getElementById('costs'))
            document.getElementById('costs').innerHTML='&euro; '+(timeout*30);
        document.getElementById('status').innerHTML = formatTime (timeout);
        timeout--;
}
</script>

次に、もちろんHTMLを持っています:

<div id="costs"></div>
<div id="status"></div>

<script type="text/javascript">countDown(3000,"status");</script>

誰かが私を助けてくれることを願っています。

自動カウントダウン、カウンターがゼロに達したときにリダイレクトする必要があり、2番目の「カウンター」から毎秒30何かを離陸する必要があります。

すべてのヒントをいただければ幸いです。

前もって感謝します。

編集: カウントダウンが機能し、タイムアウトも機能することに注意してください。ただし、カウントダウンをタイムアウト = 4 にリンクする方法がわかりません (カウントダウン関数の数は 4 にする必要があります。すでに document.getElementById('status') を試しました);などなど)。

編集2:

修理済み!

それで、それを理解しました。

同様の JS も探している人向け:

<script type="text/javascript">
function countDown(secs, ele)
{

    if(secs <= -1)
    {
        location.href = 'rangtest.php'; // No need to kill a timeout it only fires once
    }
    else
    {
        // This is just copying your code, you should fix this to use the targeted ele
        if(document.getElementById('costs'))
            document.getElementById('costs').innerHTML='&euro; '+(secs*30);
        document.getElementById('status').innerHTML = (secs);

        secs--;
        setTimeout( function() { countDown(secs, ele); }, 1000);
    }
}

</script>

@ダン市長に感謝します。

4

2 に答える 2

0

毎回新しい無名関数を作成するオーバーヘッドを支払う代わりに、jqueryのbind関数を使用することを好みます。

setTimeout(countDown.bind(this, secs, ele), 1000);
于 2013-01-06T07:29:03.810 に答える
0

タイマー関数に引数を適用しようとすると常に問題が発生したため、呼び出しようとしているものを呼び出す匿名関数を常に定義する必要がありました。以下はいくつかの変更が必要ですが、役立つはずです。

function countDown(secs, ele)
{
    if(secs <= 0)
    {
        location.href = 'mypage.htm'; // No need to kill a timeout it only fires once
    }
    else
    {
        // This is just copying your code, you should fix this to use the targeted ele
        if(document.getElementById('costs'))
            document.getElementById('costs').innerHTML='&euro; '+(secs*30);
        document.getElementById('status').innerHTML = formatTime (secs);

        secs--;
        setTimeout( function() { countDown(secs, ele); }, 1000);
    }
}
于 2013-01-05T19:21:37.900 に答える