0

こんにちは、簡単なオンライン クイズでユーザーの結果を指定された電子メールに送信するための最善の方法を見つけるのに苦労しています。私はJavascriptにかなり慣れていないので、誰かが私を正しい方向に向けることができれば、本当に感謝しています.

JSフィドルリンク

var allQuestions = [{question: "2 + 2", choices: ["4", "8", "10", "2"],     correctAnswer:0},
{question: "6 + 3", choices: ["7", "3", "5", "9"], correctAnswer:3},
{question: "4 + 4", choices: ["8", "7", "2", "9"],
correctAnswer:0},
{question: "5 + 0", choices: ["4", "5", "3", "9"], correctAnswer:1},];

//you can access checkbox name through an array
//match array number to number in allQuestions array

var questionNum = 0;
var scoreNum = 0;
var makeQuestions = "";


$(document).ready(function() {
    makeQuestions = function() {
        if(questionNum === allQuestions.length){
            $("input[value=SUBMIT]").remove();
            $("#questions").text(" Done!Please click the button below to submit your results.  Your score is" + " " + scoreNum);
        }
        else{
        $("#questions").text(allQuestions[questionNum].question);
        for(var i=0; i<allQuestions[questionNum]['choices'].length;i++){
            $('#words').append('<input type="radio" name="buttons">' + allQuestions[questionNum]['choices'][i] + '</input');
        }
        }
    }
    makeQuestions();

});



var checkQuestions = function() {
    var lenG = document.getElementsByName("buttons").length;
    console.log(lenG);
    var rightAnswer = allQuestions[questionNum]['correctAnswer'];
    for (var i=0; i<lenG; i++){
        if (document.getElementsByName("buttons")[i].checked === true) {
            console.log(i);
            console.log(document.getElementsByName("buttons")[i].checked);
            //compare value to what was inputted
            if(i === rightAnswer){
                scoreNum +=1;
                alert("Correct! Your score is" +" " + scoreNum);
            }
            else{
                alert("False! Your score is still"+ " " + scoreNum );
            }
        }

}
questionNum = questionNum +1;
$("#words").empty();
makeQuestions();

}
4

1 に答える 1

0

PHP のようなサーバー側言語を使用して、スコアをメールで送信したいと思うでしょう。また、各提出物にある種のユーザー識別子 (名前など) を添付する方法も考えておく必要があります。そうしないと、インボックスがスコアでいっぱいになり、クイズの回答者と関連付けることができなくなります。

何をすべきかの基本的なアイデアを提供するために、 jsfiddleを更新しました。「submit.php」の内容をCSSボックスに入れました。適切に解決されない場合は、次のようにします。

<?php
$answers_correct = (ctype_digit($_POST['answers_correct']) ? $_POST['answers_correct'] : 'spoofed');

$to      = 'your@email.com';
$subject = 'the subject';
$message = 'Answers correct: ' . $answers_correct;
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>

Thank you for submitting your results!

HTML の変更:

<body>
<div id="questions"></div>
<div id="words"></div>

<input type="button" value="SUBMIT" onClick="checkQuestions()" />

<div style="display:none;">
    <form id="answer_submission_form" action="submit.php" method="POST">
        <input type="hidden" id="answers_correct" name="answers_correct">
    </form>
</div>

</body>

そして、あなたのJSへの変更は、すべて$(document).ready(){....

$(document).ready(function() {
    makeQuestions = function() {
        if(questionNum === allQuestions.length){
            $("input[value=SUBMIT]").remove();
            $("#questions").text(" Done!Please click the button below to submit your results.  Your score is" + " " + scoreNum);
            $("#questions").append("<br><input type='button' id='submit_answers' value='SUBMIT'>");
            $("#answers_correct").val(scoreNum);
        }
        else{
            $("#questions").text(allQuestions[questionNum].question);
            for(var i=0; i<allQuestions[questionNum]['choices'].length;i++){
                $('#words').append('<input type="radio" name="buttons">' + allQuestions[questionNum]['choices'][i] + '</input');
            }
        }
    }
    makeQuestions();


    $('#submit_answers').on('click', function() {
        $('#answer_submission_form').submit();
    });

});

また、PHP のような言語を本当に使いたくない場合は (お勧めしません) 、 actionを使用してフォームをmailto設定することを検討してください。

于 2013-09-10T02:43:17.927 に答える