2

このスクリプトは私に問題を与えています。何度も書き直しましたが、何かが抜けています。

「質問」配列は私のオブジェクトを参照しています。これらのオブジェクトは異なる質問であり、'a' が常に正しい答えです。

この時点まで、スクリプトは正常に動作します。アイデアは、「n」を 0 からインクリメントして配列をスクロールし、正しい答えがクリックされたときに次の質問を提供することです。'x' は常に正解です (常に 'a' を保持します)。

したがって、正しい推測で「n」をインクリメントできます。ただし、関数「a()」を再度呼び出すと (アラート「hi」部分の後)、問題が発生します。n をインクリメントし、a() を呼び出して、次の質問を取得したいと考えています。次に、正しい推測 (x) をランダムな場所 (つまり、位置 0、1、または 2) に配置します。

助けてくれてありがとう。

var questions = [q0,q1,q2,q3,q4,q5,q6,q7];

var n = 0;

function a(){
var y;
var z;

var x = Math.floor((Math.random() * 3))
if(x == 0){y = 1; z = 2}else if(x == 1){y = 0; z = 2}else{y = 0; z = 1}

$("#question_holder").text(questions[n].q);

    $(".answer_holder").eq(x).text(questions[n].a);
    $(".answer_holder").eq(y).text(questions[n].b);
    $(".answer_holder").eq(z).text(questions[n].c);


    $(document).ready(function(){

        $(".answer_holder").eq(x).click(function(){
            alert("hi");
                        n++;
            a();

                     /*this area needs to get the next question by incrementing
                     n, then generate a different value to x, to place it
                     in a different position. which it does. however,
                     in subsequent questions, you can click the wrong answer as if
                     it's correct, ie not 'a' or 'x'.*/
        });
    });
};
4

2 に答える 2

3

あなたのロジックはここでは少し奇妙です..あなたがしようとしているのは、 a() が実行されるたびに新しいクリックイベントを登録することです. すべての要素に対して1つのクリックイベントを登録answer_holderし、イベントハンドラーでこれがどの要素であるかを確認し、それに応じて処理したいと思います

次の点に注意してください。

$(document).ready(function(){- このハンドラーで定義された関数は、ページが読み込まれると実行されるはずです.. a() 内で使用したくないと思います。通常、グローバル スコープでのみ使用されます (すべての関数の外部)。

$(".answer_holder").eq(x).click(function(){- このイベント ハンドラは、 の値に応じて関数を登録しますx。(グローバル スコープで) に$(".answer_holder")依存せずに、すべてのイベント ハンドラーを登録することをお勧めします。xそして、そのイベント ハンドラー内 (関数内) で、どの要素がイベントをトリガーしたかを確認します (使用$(this)- クリックされた要素を返します)。

于 2013-02-03T11:13:27.097 に答える
2

$(document).ready() が間違った場所にあります。次のようなことを試してください (注意: これは完全にテストされていません):

function setupQuestion(n) {
    var x,y,z;

    x = Math.floor((Math.random() * 3))
    if(x == 0){y = 1; z = 2}else if(x == 1){y = 0; z = 2}else{y = 0; z = 1}

    $("#question_holder").text(questions[n].q);

    $(".answer_holder").eq(x).text(questions[n].a).data('answer', 'a');
    $(".answer_holder").eq(y).text(questions[n].b).data('answer', 'b');
    $(".answer_holder").eq(z).text(questions[n].c).data('answer', 'c');
}

$(document).ready(function() {
    var n = 0;
    $('.answer_holder').click(function() {
        if ($(this).data('answer') === 'a') { // Or whatever is the correct answer
            n++;
            if (n < questions.length) {
                setupQuestion(n);
            } else {
                // Do something else, the test is finished
            }
        }
        return false;
    });
    setupQuestion(n);
});

text()関数ではなく、関数を比較していることに注意してくださいdata()。これは、ユーザーに表示されるテキストが何らかの方法で装飾されている可能性があり、比較が困難になるためです。単純に答えのインデックス 'a' 'b' または 'c' を使用する方がより明確です。

于 2013-02-03T11:16:51.883 に答える