1

HTML 要素:

<div style="text-align:center;";">
    <input style="align:center;" type="button" value="Roll" onClick='roll()';>
</div>

JavaScript スニペット:

function roll(){
    document.getElementById('test5').innerHTML=roll;
    var roll;
    document.getElementById('test').innerHTML=roll;
    if (!(roll == 1 || roll == 2 || roll == 3)){
        document.getElementById('test1').innerHTML='inLoop';
        roll = 1;
    }
    //irrelavent code

    var dice1=dice[0];
    var dice2=dice[1];
    var dice3=dice[2];
    var dice4=dice[3];
    var dice5=dice[4];
    if (roll>=3){
        score(dice1, dice2, dice3, dice4, dice5);
    }
    roll = storeRoll(roll);
    document.getElementById('test4').innerHTML=roll;
};

function storeRoll(roll){
    ++roll
    document.getElementById('test2').innerHTML='inFunction';
    document.getElementById('test3').innerHTML=roll;
    return roll;
};

rollまだ定義されていない場合は に設定し1、関数の最後に に追加する1ようにしようとしていrollます。3ロールがあると、関数が呼び出されますscore。私の試行錯誤ではroll、関数を再起動するたびに変数がリセットされているように見えました。ユーザーがHTML入力ボタンをクリックすると、関数が複数回実行されるため、ループは機能しません。ボタンをクリックするたびに、roll変数がリセットされます。コードに変数をリセットする何かがあるかどうか疑問に思っていましたroll

4

2 に答える 2

2

あなたのroll変数は function にスコープされていますroll()。関数が呼び出されるたびに、変数が再作成されます。ロールの値を保持する必要がある場合は、関数に対してグローバルとしてスコープする必要があります。推奨読書: JavaScript の変数のスコープとは?

これを達成する方法はたくさんあります。最も単純なものを除くすべてのソリューションでは、Javascript の仕組みを学ぶ必要があります。

var timesRolled = 0;

function roll() {
    timesRolled++;
    document.getElementById('test3').innerHTML = timesRolled;

    var dice1=dice[0];
    var dice2=dice[1];
    var dice3=dice[2];
    var dice4=dice[3];
    var dice5=dice[4];

    if (timesRolled >= 3) {
        score(dice1, dice2, dice3, dice4, dice5);
    }
}

function score(){
    // presumably here you will reset the timesRolled to 0, so that another game may be played
}

Javascript で真剣にプログラミングするつもりなら、Javascript についてもっと学ぶことをお勧めします。

https://developer.mozilla.org/en/learn/javascript

于 2013-04-22T02:12:34.570 に答える