0

私はクイズゲームに取り組んでおり、ユーザーは引用を提示され、作者を推測する必要があります:

  function startGame(quotes) {
    askQuestion(quotes[0], 0, 0);

    function askQuestion(quote, question, score) {
      var q = "<span class='quo'>&ldquo;</span><em>" + quote.quote + "</em><span class='quo'>&rdquo;</span>";
      $('.choice').css('visibility', 'visible');
      $('#questions').html(q);
      $('.choice').click(function(e){
        $('.choice').css('visibility', 'hidden');
        e.preventDefault();
        var nextq = (question + 1);
        var btntxt = (nextq < number_of_questions ? 'Next...' : 'Final results');
        if ($(this).attr('data-author') === quote.author) {
          score++;
          $('#questions').html('<h1>Correct.</h1><a class="btn next">' + btntxt + '</a>');
          document.getElementById('win').play();
        } else {
          $('#questions').html('<h1>Wrong.</h1><a class="btn next">' + btntxt + '</a>');
          document.getElementById('lose').play();
        }
        $('#questions').append('<h4>Score: ' + score + '/' + nextq + '</h4>');
        $('.next').on("click", function(){
          question += 1;
          if (question < number_of_questions) {
            askQuestion(quotes[question], question, score);
          } else {
            tallyScore(score);
          }
        });
      });
    }
  }

質問がされたとき、尋ねられた質問が 6 つ未満の場合は、askQuestion() 関数が再度呼び出されます。

すべてがうまく機能しますが、効果音に問題があります。ユーザーが正解した後、不正解になった場合、「勝ち」と「負け」の両方の効果音が同時に再生されます。

これは、askQuestion() を再帰的に呼び出したことと関係があると思います。関数の「履歴」全体がループされているようです。私は以前に同様の問題を抱えていました — 正解では、score グローバル変数が (1 つだけではなく) 以前の正解の数だけインクリメントされました。

どうすればそれを修正できますか?ありがとう!

編集:リクエストに応じて、ここにJSfiddleがあります。

4

2 に答える 2

1

実際には簡単に修正できます。クリックリスナーを何度も再接続しているので、設定するたびに削除してください。

変化する

  $('.choice').click(function (e) {

  $('.choice').off().click(function (e) {

http://jsfiddle.net/NADYM/

于 2013-07-31T15:43:47.663 に答える