0

javascriptを学ぶ必要があることは明らかです。オフラインで動作するテストを作成しようとしているため、PHPを使用できず、代わりにjavascriptを使用しています。今、私は正解の数のスコアを私に与えるテストを持っています。私がやった方法は、正解が1、不正解が0の値を合計することでした。したがって、正解の数を取得できます。しかし、私が本当に望んでいるのは、カッパスコアを計算することです。そのためには、この表の各グループの数を知る必要があります。

           True
          Y      N
Tester  Y  11    01
        N  10    00

これが私のクイズです:テスト

    <script type="text/javascript"> 

        function getRBValue(group) { 
        //loop
          for ( var b = 0; b < group.length; ++b ) { 
            if ( group[b].checked ) 
            return Number(group[b].value); 
            } 
            return 0; } 

        function Score(form) { 
            var total = 0; 
            for ( var q = 1; q <= 10; ++q ) { 
            total += getRBValue( form["q"+q] ); 
            } 
        form.score.value = total; 
        alert("You got " + total + " questions right!"); 
        } 

    </script> 

    </head> 
    <body> 


    <h1>test</h1> 

    <p>The following exam will allow you to evaluate your ability to grade Trachoma.</p> 
    </body> 

    <form name="prequiz" onsubmit="Score(this); return false;"> 


    <table cellpadding=15px border="0" width="65%" summary= "Questions and options are organized in a table.">
    <tbody> 
    <tr> <td>
    <b><img src="pics/1.jpeg"</b><br/> 
    <br/><input type="radio" name="q1" value="0" > Present<br/> 
    <br/><input type="radio" name="q1" value="1" > Absent<br/> 
    </td> </tr> 

    <tr> 
    <td>
    <b><img src="pics/2.jpeg"</b><br/> 
    <br/> <input type="radio" name="q2" value="0" > Present<br/> 
    <br/> <input type="radio" name="q2" value="1" > Absent<br/> 
    </td> </tr> 


    <tr> 
    <td>
    <b><img src="pics/3.jpeg"</b><br/> 
    <br/> <input type="radio" name="q3" value="1" > Present<br/> 
    <br/> <input type="radio" name="q3" value="0" > Absent<br/> 
    </td> </tr> 

    <tr> 
    <td>
    <b><img src="pics/4.jpeg"</b><br/> 
    <br/> <input type="radio" name="q4" value="0" > Present<br/> 
    <br/> <input type="radio" name="q4" value="1" > Absent<br/> 
    </td> </tr> 

    <tr> 
    <td>
    <b><img src="pics/5.jpeg"</b><br/> 
    <br/> <input type="radio" name="q5" value="0" > Present<br/> 
    <br/> <input type="radio" name="q5" value="1" > Absent<br/> 
    </td> </tr> 

    <tr> 
    <td>
    <b><img src="pics/6.jpeg"</b><br/> 
    <br/> <input type="radio" name="q6" value="0" > Present<br/> 
    <br/> <input type="radio" name="q6" value="1" > Absent<br/> 
    </td> </tr> 

    <tr> 
    <td>
    <b><img src="pics/7.jpeg"</b><br/> 
    <br/> <input type="radio" name="q7" value="0" > Present<br/> 
    <br/> <input type="radio" name="q7" value="1" > Absent<br/> 
    </td> </tr> 

    <tr> 
    <td>
    <b><img src="pics/8.jpeg"</b><br/> 
    <br/> <input type="radio" name="q8" value="1" > Present<br/> 
    <br/> <input type="radio" name="q8" value="0" > Absent<br/> 
    </td> </tr> 

    <tr> 
    <td>
    <b><img src="pics/9.jpeg"</b><br/> 
    <br/> <input type="radio" name="q9" value="1" > Present<br/> 
    <br/> <input type="radio" name="q9" value="0" > Absent<br/> 
    </td> </tr>  

    <tr> 
    <td>
    <b><img src="pics/10.jpeg"</b><br/> 
    <br/> <input type="radio" name="q10" value="0" > Present<br/> 
    <br/> <input type="radio" name="q10" value="1" > Absent<br/> 
    </td> </tr> 

    </tbody> </table> </center> 

    <br><br>

    <input type="submit" name="submit" value="Score exam now"> 
    <br/><br/>

    <b>Your score:</b><input type="text" name="score" readonly="readonly" />
    <br/>
    </form> </html>
4

1 に答える 1

0

ではgetRBValue、グループ要素をループします。グループ要素には常に2つあります。最初の選択肢は常に現在の選択肢であり、2番目の選択肢は常に不在の選択肢です。現在のコードでは、ループ変数の値によってこれらを区別できますb。ただし、コードを次のように書き直します。

var PP, // correct is Present; user answered Present
    PA, // correct is Present; user answered Absent
    PN, // correct is Present; user did not answer
    AP, // correct is Absent; user answered Present
    AA, // correct is Absent; user answered Absent
    AN; // correct is Absent; user did not answer

function ScoreGroup(group) {
    var presentIsCorrect = Number(group[0].value);
    if (group[0].checked) {
        // user answered Present
        if (presentIsCorrect) {
            PP++;
        } else {
            AP++;
        }
    } else if (group[1].checked) {
        // user answered Absent
        if (presentIsCorrect) {
            PA++;
        } else {
            AA++;
        }
    } else {
        // user did not answer the question
        if (presentIsCorrect) {
            PN++;
        } else {
            AN++;
        }
    }
}

function Score(form) { 
    PP = PA = PN = AP = AA = AN = 0;
    for ( var q = 1; q <= 10; ++q ) { 
        ScoreGroup( form["q"+q] ); 
    }
    var totalCorrect = PP + AA;
    // TODO: compute kappa from PP, PA, PN, AP, AA, AN, and totalCorrect
    form.score.value = totalCorrect; 
    alert("You got " + totalCorrect + " questions right!");
}

生のカウントを2D配列に累積することもできますが、私の意見では、明示的な変数を使用すると、コードがより読みやすくなります(より冗長な場合)。

于 2012-11-07T14:09:18.023 に答える