下面是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>
非常感谢您的帮助!
答案 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
代替setInterval
和clearInterval
:
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>