0

我试图制作一个 JS 倒计时脚本来调整要走的秒数和必须支付的价格。

例如:您将在5秒内被重定向或点击这里支付150立即重定向。

因此,每秒 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>

我希望有一个人可以帮助我。

自动倒计时,当计数器达到零时必须重定向,必须从第二个“计数器”每秒起飞 30 次。

所有提示将不胜感激。

提前致谢。

编辑:注意倒计时有效,超时也有效,但我不知道如何将倒计时链接到 timeout = 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

我一直在尝试将参数应用于计时器函数时遇到问题,这导致我总是定义一个匿名函数,该函数又调用我试图调用的函数。下面将需要一些修改,但应该有所帮助。

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 回答
0

我更喜欢使用 jquery 的 bind 函数,而不是每次都支付创建新匿名函数的开销:

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