PDA

View Full Version : Score Not Incrementing and errors



kadi
08-25-2014, 02:28 PM
My Code Is about +1 score for every correct answer. Only a score of one is achieving for first question1 and when i type the correct answer for question2 score is not incrementing. My final score should be 2 since i have only two questions but whats happening in my code is that if i delete first answer 'yes' score is going to 4 and so on. Dont know where the error in my code is...



<div id="score" style="font: bolder 20px courier">score: 0</div>
<input type="text" id="question" />
<input type="text" id="question1" />

<script>
var answers = {
'question': 'yes',
'question1': 'no',

};

var score = 0;

function checkResults() {

var $this = $(this),
val = $this.val().toLowerCase();

for (var k in answers) {
if (answers.hasOwnProperty(k)) {

if (k == $this.attr('id') && answers[k] === val) {
$this.css('background-color', 'green');
score += 1;

break;
} else {
$this.css('background-color', 'red');
}

}
}


if (score == 2) {
alert('Hi Ur Score is 2');
}


$('#score').text('score: ' + score);

}

$('input').on('keyup', checkResults);
</script>

jscheuer1
08-25-2014, 04:06 PM
The error in logic here is that you are incrementing score regardless of whether or not it already was incremented for a correct answer to a given question and not decrementing score if a correct answer becomes an incorrect one. There could be other conceptual ways of doing this, and there are certainly other coding methods that could be used. My approach was to keep track of when a point was awarded for a question (changes/additions highlighted):


<script>
var answers = {
'question': 'yes',
'question1': 'no',

};

var score = 0;

function checkResults() {

var $this = $(this),
val = $this.val().toLowerCase();

for (var k in answers) {
if (answers.hasOwnProperty(k)) {

if (k == $this.attr('id') && answers[k] === val) {
$this.css('background-color', 'green');
!$this.data('awarded') && ++score;
$this.data('awarded', true);
break;
} else {
$this.css('background-color', 'red');
if($this.data('awarded')){
$this.data('awarded', false);
--score;
}
}

}
}


/* if (score == 2) {
alert('Hi Ur Score is 2');
} */


$('#score').text('score: ' + score);

}

$('input').on('keyup', checkResults);
</script>