1

構文エラーが修正されました。Dreamweaver で、コードの 52 行目にエラーがあると表示されます。何が問題なのかわかりません。おそらくこれは、私の if ステートメントと else ステートメントが機能していないという事実と関係があります。

IF ステートメントと ELSE ステートメントが修正されました。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() でそれらを呼び出す方法を再確認しましたが、できる限り正しいですか?

4

3 に答える 3

2

使い方がclearInterval()間違っています。オブジェクトを期待しているのに、関数パラメーターを渡しています。

// correct usage
var time = setInterval(stuff, 100);
clearInterval(time);
于 2013-03-12T18:53:14.827 に答える
0

ifステートメントで物事が「等しい」かどうかをテストしたい場合は、==or===と 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

次の質問の答えを読んで、 と の違いを確認==してください。===

JavaScript における == と === の違い

お役に立てれば

于 2013-03-12T19:08:56.217 に答える
0

else の前にセミコロンがあります。;これは構文エラーです。削除してください。それらの多くは奇妙な場所にもあります。if ブロック、if/else ブロック、ループ ブロックなど、関数宣言の後に配置しないことをお勧めします。

于 2013-03-12T18:57:09.887 に答える