1

真偽に基づいたいくつかの質問を含むクイズ スクリプトを jQuery で作成します。各質問には 2 つの選択肢があります。質問 1 に対して選択肢 1 の正しい答えを選択すると、自動的に選択肢 2 の間違った答えが選択されます (逆に言えば、これは論理的です。1 つの質問に 2 回答えることはできません)。

私のスクリプトでは、問題があります。言うのは簡単ですが、コーディングするのはより困難です。質問 1 の正解を 2 回クリックすると、スコアが 2 倍になります。同じ質問に対して別の回答 (この場合は選択肢 1 に対して False) を選択すると、同じ問題が発生します。すべての答えを選択できますが、これは論理的ではありません…</p>

質問ごとに 1 回の「クリック」で選択肢を「ブロック」するように検索していますが、その方法がわかりません。vars で遊んでみましたが、説得力がありませんでした。

quizz = function(){
  vars = {
     score  : 0,
     scroll : 1
  };

  // Scroll to the next question
  q = {
     next: function(which){
        if (vars.scroll === 1){
           $d.scrollTo(which, 500);
        }
     },
     // If good answer is clicked, increase the score
     score: function(which){
        if (which.hasClass("t")){
           vars.score++;
        }
     }
  };
};

// Init the quizz
quizz();

// On questions click
$(".quizz .r").on("click", function(e){
  var $t = $(this),
      $q = $t.closest(".q"),
      q_ans = $t.attr("class").split("r ")[1],
      q_id = $q.attr("id"),
      ac = "active";

  $t.addClass(ac);
  $q.find("."+ q_ans).addClass(ac);
  q.score($t);

  if (q_id == "q7"){
     e.preventDefault();
  } else {
     q.next($q.next());
  }

  $(".result p").html("Score : "+ vars.score);

   e.preventDefault();
});

ここに私の試みがあります: http://jsfiddle.net/uZQbS/

アイデアがあれば… よろしくお願いします!

4

2 に答える 2

2

これにより、正解によってスコアが 2 回以上増加するのを防ぐことができます。

 // If good answer is clicked, increase the score
     score: function(which){
        if (which.hasClass("t")){
           vars.score++;
           which.removeClass("t"); //added
        }
     }
于 2012-12-14T21:45:01.080 に答える
2

無効化クラスで遊ぶソリューションが見つかりました。

// On questions click
$(".quizz .r").on("click", function(e){
    var $t = $(this),
        $q = $t.closest(".q"),
        q_ans = $t.attr("class").split("r ")[1],
        q_id = $q.attr("id"),
        ac = "active";

    if ($q.is(":not(.disable)")){
       $t.addClass(ac);
       $q.find("."+ q_ans).addClass(ac);
       $q.addClass("disable");
       q.score($t);

       if (q_id == "q7"){
          e.preventDefault();
       } else {
          q.next($q.next());
       }

      $(".result p").html("Score : "+ vars.score);
   }

   e.preventDefault();
});
于 2012-12-14T22:51:07.150 に答える