如何停止setInterval()?

时间:2012-05-28 13:23:55

标签: javascript html setinterval clearinterval

下面是setInterval()clearInterval() ..

的脚本

我搜索了clearInterval()以停止setInterval() ...我实现了该代码,但它无效..

我想在这里实现的是,例如,有8个捕食者和3个猎物。当捕食者多于猎物时,setInterval将开始,因此猎物将减少3,而捕食者将增加3个..当猎物的数量达到0时,捕食者应该停止增加,因为没有更多的猎物了...

这里的问题是,当猎物达到0时,捕食者仍然在增加..我在clearInterval()中添加但是它无效......我可以知道出了什么问题吗?

<script>
    function startAni() {
        if ((document.getElementById('amount').value) >= (document.getElementById('amount5').value)) {
            alert("Predator is more than prey! FRENZY TIME!");
            var interval = setInterval(function () {
                Remove3(), removevalue3(), Add(), addvalues();
                if (document.getElementById('amount5').value = "0") {
                    alert("No more Prey!");
                    clearInterval(interval);
                }
            }, 5000);
        } else {
            alert("Prey is more than Predator! Revenge time!")
        }
    }
</script>

非常感谢您的帮助!

4 个答案:

答案 0 :(得分:7)

您需要确保DOM上的实际input标识为amount5,因为如果有,则document.getElementById('amount5').value = "0"将为true并清除您的间隔马上......

但是

if (document.getElementById('amount5').value = "0") {

应该是

if (document.getElementById('amount5').value == "0") {

在javascript中使用double equals(==)进行比较。

答案 1 :(得分:1)

此:

if(document.getElementById('amount5').value = "0"){

您应该使用==代替=,否则您的情况总是真实的。话虽如此,该声明会立即杀死计时器。

答案 2 :(得分:0)

另一种看待它的方法是使用setTimeout代替setIntervalclearInterval

function doAdd() {
    Remove3(), removevalue3(), Add(), addvalues();
    if (document.getElementById('amount5').value = "0") {
        alert("No more Prey!");
        // thats it, no more recursion as your stop condition has been met
    }
    else {
        setTimeout(doAdd, 5000); // continue as there is more to be done
    }
}
setTimeout(doAdd, 0); // start it off

答案 3 :(得分:0)

您在设置区间变量范围时犯了错误。您应该将其定义为全局变量。

如果在“startAni”函数中定义它,则“startAni”函数中的嵌套函数无法访问该变量。

您应该定义为:

<script>
    var interval;//define it here
    function startAni() {
        if ((document.getElementById('amount').value) >= (document.getElementById('amount5').value)) {
            alert("Predator is more than prey! FRENZY TIME!");
            interval = setInterval(function () {  //do not redefined interval as var just use it here
    ....

</script>