clearInterval()不起作用

问题描述:

语法错误固定。 Dreamweaver说我在第52行的代码中有一个错误。我看不出什么错误?也许这与我的if和else声明不起作用有关。clearInterval()不起作用

如果和其他条款不成立。如果我单独测试if和else语句,它们可以正常工作,但是当我运行整个文档时,它们不会运行。有人可以告诉我,如果错误和我的if/else语句不起作用是相关的,或者是否有其他错误。

<script> 
var car1=new Object(); 
car1.Name="Rusty"; 
car1.Speed="1px", 40; 
car1.Distance=0; 

var car2=new Object(); 
car2.Name="Dusty"; 
car2.Speed="2px", 40; 
car2.Distance=0; 

var car3=new Object(); 
car3.Name="Crankshaft"; 
car3.Speed="4px", 40; 
car3.Distance=0; 

function runRusty(){ 

setInterval(function(){moveRusty()},40); 

    function moveRusty(){car1.Distance=car1.Distance +1 
     document.getElementById("rusty").style.marginLeft=car1.Distance + "px" 
     }; 
}; 


function runDusty(){ 

setInterval(function(){moveDusty()},40); 

    function moveDusty(){car2.Distance=car2.Distance +1 
     document.getElementById("dusty").style.marginLeft=car2.Distance + "px" 
     }; 
}; 


function runCrankshaft(){ 

setInterval(function(){moveCrank()},40); 

    function moveCrank(){car3.Distance=car3.Distance +1 
      document.getElementById("crankshaft").style.marginLeft=car3.Distance + "px" 
     }; 
}; 


function winLose() {if (document.getElementById("rusty").style.marginLeft="900px"){ 
        alert("Winner is Rusty!"); 
        clearInterval(runRusty); 
        } 

else if(document.getElementById("dusty").style.marginLeft="900px"){ 
        alert("Winner is Dusty!"); 
        clearInterval(runDusty); 
        } 

       else if(document.getElementById("crankshaft").style.marginLeft="900px"){ 
        alert("Winner is Crankshaft!"); 
        clearInterval(runCrankshaft); 
        }; 
       }; 
</script> 

编辑:

if和else语句现在的工作,因为我改变了全球范围内宣布我的职务,并将其变化不大。代码现在看起来如此:

var car1=new Object(); 
    car1.Name="Rusty"; 
    car1.Speed=1; 
car1.Distance=0; 

var car2=new Object(); 
car2.Name="Dusty"; 
car2.Speed=2; 
car2.Distance=0; 

var car3=new Object(); 
car3.Name="Crankshaft"; 
car3.Speed=4; 
car3.Distance=0; 

var moveRusty; 
var moveDusty; 
var moveCrankShaft; 


function runRusty(){ 

moveRusty=setInterval(function(){ 

     car1.Distance=car1.Distance + car1.Speed; 
     document.getElementById("rusty").style.marginLeft=car1.Distance + "px"; 
     winLose(); 
     },40); 
}; 


function runDusty(){ 

moveDusty=setInterval(function(){ 

     car2.Distance=car2.Distance + car2.Speed; 
     document.getElementById("dusty").style.marginLeft=car2.Distance + "px"; 
     winLose(); 
     },40); 
}; 

function runCrankshaft(){ 

moveCrankShaft=setInterval(function(){ 

     car3.Distance=car3.Distance + car3.Speed; 
     document.getElementById("crankshaft").style.marginLeft=car3.Distance + "px"; 
     winLose(); 
     },40); 
} 

function winLose() { 

    if (car1.Distance >= 900){ 
     alert("Winner is Rusty!"); 
     car1.Distance = 0; 
     car1.Speed = 0; 
     car2.Distance = 0; 
     car2.Speed = 0; 
     car3.Distance = 0; 
     car3.Speed = 0; 



    } 

    else 

    if(car2.Distance >= 900){ 
     alert("Winner is Dusty!"); 
     car1.Distance = 0; 
     car1.Speed = 0; 
     car2.Distance = 0; 
     car2.Speed = 0; 
     car3.Distance = 0; 
     car3.Speed = 0; 


    } 

    else 

    if(car3.Distance >= 900){ 
     alert("Winner is Crankshaft!"); 
     car1.Distance = 0; 
     car1.Speed = 0; 
     car2.Distance = 0; 
     car2.Speed = 0; 
     car3.Distance = 0; 
     car3.Speed = 0; 

    } 
}; 

clearInterval(moveRusty); 
clearInterval(moveDusty); 
clearInterval(moveCrankShaft); 

现在一切正常。所有警报都会发生,汽车的位置将被重置。但是我所有的clearInterval()都不起作用。我不知道是否clearInterval()是正确的使用。我想要做的是重置页面,以便我可以再次运行“游戏”。现在,唯一的方法就是刷新页面。我已经仔细检查了我是如何声明我的setInterval()以及如何在我的clearInterval()中调用它们的,并且我尽可能地是正确的?

您正在使用错误的clearInterval()。你传递一个函数参数,而它期望一个对象。

// correct usage 
var time = setInterval(stuff, 100); 
clearInterval(time); 
+0

我创建了一个对象:var rustyTimer = setInterval(function(){moveRusty()},40); \t \t功能moveRusty(){car1.Distance = car1.Distance 1 \t \t \t的document.getElementById( “生锈”)style.marginLeft = car1.Distance + “PX” \t \t \t。};'所以我clearInterval()是这样的,现在'功能winLose(){如果(的document.getElementById( “生锈”)。style.marginLeft == “900px”){ \t \t \t \t \t \t警报(“得主是生锈的!“); \t \t \t \t \t \t clearInterval(rustyTimer); \t \t \t \t \t \t}'但现在我的代码被打破 - 就像它之前我声明的对象不起作用把一个对象到调用clearInterval。 ()没有工作 – 2013-03-12 19:15:43

+0

我也对我的评论中缺乏造型表示歉意。我仍然习惯于这个网站。 – 2013-03-12 19:19:25

你在别的之前有一个分号。 ;这是一个语法错误,将其删除。你也有很多奇怪的地方,我建议你不要把它们放在函数声明之后,如果块if/else块,循环块等。

+0

谢谢!修正了语法错误。我的if和else语句仍然不起作用试图找出 – 2013-03-12 19:05:11

当你想测试的东西是否'相等'在if语句,你需要使用=====和NOT =

if (document.getElementById("crankshaft").style.marginLeft = "900px") // WRONG 
if (document.getElementById("crankshaft").style.marginLeft == "900px") // RIGHT 
if (document.getElementById("crankshaft").style.marginLeft === "900px") // BETTER 

阅读回答以下问题,以了解=====

Difference between == and === in JavaScript

0123之间的差异

希望这会有帮助

+0

谢谢,我试过这个,但它没有改变任何东西。 – 2013-03-12 19:12:19

+0

你是怎样看待HTML的?你有一个元素与我d ='Rusty' – 2013-03-12 19:18:48

+0

是的,我确实有一个id ='Rusty' – 2013-03-12 19:55:07