1

ラジオボタンを使用してユーザーに提供された回答を確認するJavaScriptでクイズを作成しようとしています。最初のエントリは正常にチェックされますが、2番目の質問に移動すると、未定義の型エラーがスローされますcannot read property of undefined。この行で、document.formをいじってgetElementById使用しようとしましたが、エラーが発生する理由を理解できませんでした。コードは、最初の質問に使用されたもののコピーアンドペーストであり、正常に機能します。助けてください!

var questionsChosen = new Array();
for (var i = 1;i<16 ;i++ )
{
    questionsChosen[i]= false;
}
function randomQuestion()
{
    var myQuestions = new Array();
    myQuestions[1] = "<tr><td><h4>Which one of these authors wrote and illustrated 'Calvin and Hobbes'?</h4></td></tr><tr><td><input type='radio' name='question1' value='Charles Schultz'>Charles Schultz<br><input type='radio' name='question1' id='correct' value='Bill Watterson'>Bill Watterson<br><input type='radio' name='question1' value='Jim Davis'>Jim Davis<br><input type='radio' name='question1' value='Tommy Peters'>Tommy Peters<br><hr/></td></tr>";

    myQuestions[2] = "<tr><td><h4>In the Calvin and Hobbes Comic, Who was Calvin's annoying neighbour?</h4></td></tr><tr><td><input type='radio' name='question2' id='correct' value='Susie Derkins'/>Susie Derkins<br><input type='radio' name='question2' value='Samantha Jones'/>Samantha Jones<br><input type='radio' name='question2' value='Sally Parker'/>Sally Parker<br><input type='radio' name='question2' value='Sarah Marsh'/>Sarah Marsh<br><hr/></td></tr>";

    for (var k = 1;k<myQuestions.length ;k++ )
    {
        document.write(myQuestions[k]);
        questionsChosen[i]= true;
    }
}

function checkAnswers()
{
    // use boolean to set whether a question has been asked or not. if it has then check here 
    // maybe something like if question1==true
    if (questionsChosen[1]= true)
    {
        var correctAnswer = document.myQuiz.question1[1].value;
        var userAnswer;
        for (i=0; i<document.myQuiz.question1.length; i++) 
        {
            if (document.myQuiz.question1[i].checked==true)
            {
                userAnswer =document.myQuiz.question1[i].value
            }
        }
        document.write("<br><br>Which one of these authors wrote and illustrated 'Calvin and Hobbes'?");
        document.write("<br>Your chosen answer is: "+userAnswer);
        if (correctAnswer == userAnswer)
        {
            document.write("<br>Correct!");
        }
        else document.write("<br>Incorrect... The answer was "+ correctAnswer);
    }


    if (questionsChosen[2]= true)
    {
        var correctAnswer = document.myQuiz.question2.value;
        var userAnswer;
        for (i=0; i<document.myQuiz.question2.length; i++) 
        {
            if (document.myQuiz.question2[i].checked==true)
            {
                userAnswer =document.myQuiz.question2[i].value
            }
        }
        document.write("<br><br>In the Calvin and Hobbes Comic, Who was Calvin's annoying neighbour?");
        document.write("<br>Your chosen answer is: "+userAnswer);
        if (correctAnswer == userAnswer)
        {
            document.write("<br>Correct!");
        }
        else document.write("<br>Incorrect... The answer was "+ correctAnswer);
    }
}

`

4

3 に答える 3

0

question2 も question1 のような配列である場合、値を取得して正解として設定する配列のインデックスを指定する必要があります。question2 は配列そのものです。配列は値を持つことはできませんが、その要素には値があります。したがって、question2[1].value などを読み取る必要があります。

于 2012-11-04T18:54:50.947 に答える
0

var correctAnswer = document.myQuiz.question2.value;行を次のように変更してください

var correctAnswer = document.myQuiz.question2[1].value;

put 1,2,3,4 waterever が正解です

于 2012-11-04T18:56:47.353 に答える
0

以下のコードを試してみましたが、完全に正常に動作しています。

<html><head></head><body>
    <script>
    var questionsChosen = new Array();
    for (var i = 1;i<16 ;i++ )
    {
        questionsChosen[i]= false;
    }
    function randomQuestion()
    {
        var myQuestions = new Array();
        myQuestions[1] = "<tr><td><h4>Which one of these authors wrote and illustrated 'Calvin and Hobbes'?</h4></td></tr><tr><td><input type='radio' name='question1' value='Charles Schultz'>Charles Schultz<br><input type='radio' name='question1' id='correct' value='Bill Watterson'>Bill Watterson<br><input type='radio' name='question1' value='Jim Davis'>Jim Davis<br><input type='radio' name='question1' value='Tommy Peters'>Tommy Peters<br><hr/></td></tr>";

        myQuestions[2] = "<tr><td><h4>In the Calvin and Hobbes Comic, Who was Calvin's annoying neighbour?</h4></td></tr><tr><td><input type='radio' name='question2' id='correct' value='Susie Derkins'/>Susie Derkins<br><input type='radio' name='question2' value='Samantha Jones'/>Samantha Jones<br><input type='radio' name='question2' value='Sally Parker'/>Sally Parker<br><input type='radio' name='question2' value='Sarah Marsh'/>Sarah Marsh<br><hr/></td></tr>";

        for (var k = 1;k<myQuestions.length ;k++ )
        {
            document.write(myQuestions[k]);
            questionsChosen[i]= true;
        }
        document.write("<a href='Javascript:void(0)' onclick='checkAnswers();'>Check Answers</a>");
    }

    function checkAnswers()
    {
        // use boolean to set whether a question has been asked or not. if it has then check here 
        // maybe something like if question1==true
        if (questionsChosen[1]= true)
        {
            var correctAnswer = document.myQuiz.question1[1].value;
            var userAnswer;
            for (i=0; i<document.myQuiz.question1.length; i++) 
            {
                if (document.myQuiz.question1[i].checked==true)
                {
                    userAnswer =document.myQuiz.question1[i].value
                }
            }
            document.write("<br><br>Which one of these authors wrote and illustrated 'Calvin and Hobbes'?");
            document.write("<br>Your chosen answer is: "+userAnswer);
            if (correctAnswer == userAnswer)
            {
                document.write("<br>Correct!");
            }
            else document.write("<br>Incorrect... The answer was "+ correctAnswer);
        }


        if (questionsChosen[2]= true)
        {
            var correctAnswer = document.myQuiz.question2[1].value;
            var userAnswer;
            for (i=0; i<document.myQuiz.question2.length; i++) 
            {
                if (document.myQuiz.question2[i].checked==true)
                {
                    userAnswer =document.myQuiz.question2[i].value
                }
            }
            document.write("<br><br>In the Calvin and Hobbes Comic, Who was Calvin's annoying neighbour?");
            document.write("<br>Your chosen answer is: "+userAnswer);
            if (correctAnswer == userAnswer)
            {
                document.write("<br>Correct!");
            }
            else document.write("<br>Incorrect... The answer was "+ correctAnswer);
        }
    }

    </script>
    <form name='myQuiz'>
        <script>
            randomQuestion();
        </script>

    </form>
    </body></html>
于 2012-11-05T05:16:29.017 に答える