2016-04-10 13 views
1

CodePenの私のペンへのリンクがマーキングされた - http://codepen.io/PartTimeCoder/pen/WwMxEX?editors=0010JavaScriptで私のaskQuestion()関数は常に間違っansweras

Javascriptがここにある:私が思うところコメントの間で

function randomNum(digits) { 
    return Math.floor(Math.pow(10, digits - 1) + Math.random() * 9 * Math.pow(10, digits - 1)); 
} 

function askQuestion(digits) { 
    $(".result").html(""); 

    var factor1 = randomNum(digits); 
    var factor2 = randomNum(digits); 
    var correctanswer = factor1 * factor2; 
    var answer = parseInt($(".answer").val(), 10); 

    console.log(correctanswer); 

    $(".question").html(factor1 + " × " + factor2); 

    var score = 0; 

    //Problem Starts Here 
    $(".check").click(function() { 
     if (correctanswer == answer) { 
      $(".result").html("Correct"); 
      score += 1; 
      $(".score").html(score); 
      askQuestion(digits); 
     } else { 
      $(".result").html("Wrong"); 
      score -= 1; 
      $(".score").html(score); 
     } 
    }); 
    //Problem Ends Here 
} 

$(document).ready(function() { 
    $(".answer").hide(); 
    $(".check").hide(); 

    var digits = 0; 

    $(".digits-1").click(function() { 
     digits += 1; 
    }); 

    $(".digits-2").click(function() { 
     digits += 2; 
    }); 

    $(".digits-3").click(function() { 
     digits += 3; 
    }); 

    $(".btn").click(function() { 
     $(".btn").hide(); 
     $(".answer").show(); 
     $(".check").show(); 
     askQuestion(digits); 
    }); 
}); 

です問題はです。例えば、4 x 9とi入力36を求めるとき、それは依然としてそれを間違っているとマークする。なぜこれがこれをしているのかわかりません。最初は私はまだ入力された情報が文字列かもしれないので、私はそれにparseIntを使いましたが、それはまだ動作しませんでした。すべての助けに感謝します。前もって感謝します!

答えて

2

answer変数に$('.answer')要素の初期値をキャッシュしているという問題があります。 $('.answer').val()を実行すると、そのときににあるが保存されるため、ユーザーが後で回答を変更すると、変数に反映されません。あなたがしたいことは次のようなものです:

// Rest of your code above 
var answer = $(".answer"); 

console.log(correctanswer); 

$(".question").html(factor1 + " × " + factor2); 

var score = 0; 

//Problem Starts Here 
$(".check").click(function() { 
    // Don't check what is in the input until you're ready to use the value. 
    if (correctanswer == parseInt(answer.val(), 10)) { 
     $(".result").html("Correct"); 
     score += 1; 
     $(".score").html(score); 
     askQuestion(digits); 
    } else { 
     $(".result").html("Wrong"); 
     score -= 1; 
     $(".score").html(score); 
    } 
}); 
+0

これはうまく動作しますが、最初に問題が発生した場合は最初に質問しますが、2回目は問題になります。あなたはこれを修正する方法を知っていますか? –

+0

あなたの 'score'変数は、askQuestion関数を入力するたびに0に設定されます。したがって、それらは1を超えることはありません。その変数を関数の外に移動するか、 '$( '。score')要素の値から読み込むことができます。 – krillgar

+0

また、addQuestion関数からcheck clickイベントを取得します。それ以外の場合は、その関数を呼び出すたびに、別のリスナーを追加すると、スコアがばかげたレートで上昇することがわかります。 – krillgar

2

クリックハンドラは古い回答値を参照しています。毎回入力から値を取得する必要があります。

$(".check").click(function() { 
    var answer = parseInt($(".answer").val(), 10); 
    if (correctanswer == answer) { 
     $(".result").html("Correct"); 
     score += 1; 
     $(".score").html(score); 
     askQuestion(digits); 
    } else { 
     $(".result").html("Wrong"); 
     score -= 1; 
     $(".score").html(score); 
    } 
}); 
関連する問題