HyperMonkey
HyperMonkey

Reputation: 115

Go on to the next element in a javascript quiz so whenever it finishes one it goes on to the next one

Whenever you finish answering a question it ends the program in the code below. Is there anyway to make it so that whenever you finish a question maybe number 2, it goes on to number 3 and when it goes to the last number it finishes. Thanks in advance. I am 11 and started programming around 9 months ago

                             <!DOCTYPE html>
    <html>
      <head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Are you smarter than a 5th Grader?!!</title>
<link rel="stylesheet" href="style.css">
</head>
<body onload="starter()" bgcolor="lightblue">
<h1><marquee><font color="red">Make Trivia Great Again!</font></marquee>
</h1>
 <h2><em><center>Are You Smater Than a 5th Grader?</center></em></h2>
  <button onclick="sc()">Start</button><br>
  <p id="demo"> </p>
  <div id="result"></div>
<button onclick="reset()">Reset Score</button>
<script>
  function starter(){ 
    setTimeout("clickCounter()",100)
    setTimeout("minusCounter()",101)}
  function reset(){
    setTimeout("clickCounter()",100) 
    localStorage.clickcount=-1

  }
  function clickCounter() {
    if(typeof(Storage) !== "undefined") {

      if (localStorage.clickcount) {
        localStorage.clickcount = Number(localStorage.clickcount)+1;
      } else {
        localStorage.clickcount = 0;
      }
      document.getElementById("result").innerHTML = "Score:"+   localStorage.clickcount 
    } else {
    }   } 
 function minusCounter(){

 if(typeof(Storage) !== "undefined") {

   if (localStorage.clickcount) {
     localStorage.clickcount = Number(localStorage.clickcount)-1;
   } else {
     localStorage.clickcount = 0;
   }
   document.getElementById("result").innerHTML = "Score:"+   localStorage.clickcount 
 } else {
 } 
 }

  if (!("scramble" in Array.prototype)) {
    Object.defineProperty(Array.prototype, "scramble", {
      enumerable: false,
      value: function() {
        var o, i, ln = this.length;
        while (ln--) {
          i = Math.random() * (ln + 1) | 0;
          o = this[ln];
          this[ln] = this[i];
          this[i] = o;
        }
        return this;
      }
    });
  }
  var quiz = [{
    "question": ["When was the first apple computer made?],
    "choices": ["1904","1976","1978","2004"],
    "correct": ["1976"]
  }, {
    "question": "Who is the founder of Microsoft?",
    "choices": ["Bill Gates", "Steve Jobs", "Steve Wozniak" , "Martin Shaba"],
    "correct": "Bill Gates"
  }, {
    "question": "What was your first dream?",
    "choices": ["8 bits", "64 bits", "1024 bits"],
    "correct": "8 bits"
  }, {
    "question": "The C programming language was developed by?",
    "choices": ["Brendan Eich", "Dennis Ritchie", "Guido van Rossum"],
    "correct": "Dennis Ritchie"
  }, {
    "question": "What does CC mean in emails?",
    "choices": ["Carbon Copy", "Creative Commons", "other"],
    "correct": "Carbon Copy"
  }, {
    "question": "What is the full for of IP",
    "choices": ["Internet provider", "Intenet Port", "Other","Internet Protocol"],
    "correct": "Other"
  }]
  function stop(){
    alert("stopped")
  }
  function sc(){
  quiz.forEach(q => q.choices.scramble());
  var x = prompt("Select Start question number #:");
    if (x >= 6) {
        alert("please pick a valid question")
        sc()
    } else if (x <= 5 && x > 0) {

    } else if (x == 0) { // x = 0 is assignment, not comparison
        alert("please pick a valid question")
        sc()
        return;  // You have to 'return' here
                 // otherwise the code following the else would continue to execute after this inner-sc() returns
    } else {
        alert("Please pick a valid question"), sc()
    }

  var ans = ""
  function myFunction(item, index) {
    ans += "\n[" + (index+1) + "]: " + item ; 
  }
  quiz[x].choices.forEach(myFunction);

  var y = prompt(quiz[x].question+"\nYour anwser is:"+ans);

  if (y == quiz[x].correct){
    alert("Correct!")
    clickCounter()

  }
  else if(y=="Cancel"){alert("canceled")}
  else{
    alert("Wrong! Please Try Again.");
    repeat()
  }
 function repeat(){
quiz.forEach(q => q.choices.scramble());
var ans = ""
function myFunction(item, index) {
  ans += "\n[" + (index+1) + "]: " + item ; 
}
quiz[x].choices.forEach(myFunction);

var y = prompt(quiz[x].question+"\nYour anwser is:"+ans);

if (y == quiz[x].correct){
  alert("Correct!,Good Job")
  clickCounter()
  //x+1

}
else if(y=="Cancel"){alert("canceled")}
else{
  alert("Sorry! \nThe right answer is "+quiz[x].correct);

        }
      }

    }

        </script>


      </body>
    </html>

Upvotes: 0

Views: 84

Answers (2)

James Douglas
James Douglas

Reputation: 3446

You seem to have already asked this question here. On the other hand, there's a problem with your code.

49.60 Unclosed string.

"question": ["When was the first apple computer made?],

I've written the code for you. I've used a simple JavaScript for loop, and here is the updated sc() function:

function sc(){
  for (x = 1; x < 6; x++){ //this is the vital part
    quiz.forEach(q => q.choices.scramble());
    var ans = ""
    function myFunction(item, index) {
      ans += "\n[" + (index+1) + "]: " + item ; 
    }
    quiz[x].choices.forEach(myFunction);
    var y = prompt(quiz[x].question+"\nYour anwser is:"+ans);
    if (y == quiz[x].correct){
      alert("Correct!")
      clickCounter()
    }
    else if(y=="Cancel"){
      alert("canceled")
      return; //This closes the box
    }
    else{
      alert("Wrong! Please Try Again.");
      repeat()
    }
    function repeat(){
      quiz.forEach(q => q.choices.scramble());
      var ans = ""
      function myFunction(item, index) {
        ans += "\n[" + (index+1) + "]: " + item ; 
      }
      quiz[x].choices.forEach(myFunction);
      var y = prompt(quiz[x].question+"\nYour anwser is:"+ans);
      if (y == quiz[x].correct){
        alert("Correct!,Good Job")
        clickCounter()
      } else if(y=="Cancel"){
        alert("canceled")
      } else {
        alert("Sorry! \nThe right answer is "+quiz[x].correct);
      }
    }
  } //This is also vital
}

You can read more about for loops here: https://www.tutorialspoint.com/javascript/javascript_for_loop.htm

And here is an example of the code: http://codepen.io/JamesDouglas/pen/ybzByQ

P.S. It's quite annoying not being able to close the box, so i've added onto your code that closes it. It would also be helpful to notify users that typing "Cancel" will close the box, as I only found out after looking at the code.

Upvotes: 1

Jonas Wilms
Jonas Wilms

Reputation: 138267

As you already know, your code is really beautiful :/ . Lets clean it up a bit:

 var quiz = [{
    "question": ["When was the first apple computer made?"],
    "choices": ["1904","1976","1978","2004"],
    "correct": ["1976"]
}, {
    "question": "Who is the founder of Microsoft?",
    "choices": ["Bill Gates", "Steve Jobs", "Steve Wozniak" , "Martin Shaba"],
    "correct": "Bill Gates"
}, {
    "question": "What was your first dream?",
    "choices": ["8 bits", "64 bits", "1024 bits"],
    "correct": "8 bits"
}, {
   "question": "The C programming language was developed by?",
   "choices": ["Brendan Eich", "Dennis Ritchie", "Guido van Rossum"],
   "correct": "Dennis Ritchie"
}, {
  "question": "What does CC mean in emails?",
  "choices": ["Carbon Copy", "Creative Commons", "other"],
  "correct": "Carbon Copy"
}, {
    "question": "What is the full for of IP",
    "choices": ["Internet provider", "Intenet Port", "Other","Internet Protocol"],
    "correct": "Other"
}];
 quiz.forEach(question=>question.choices.scramble());

var score=0;

function ask(index){
      index= (index||0) % quiz.length; //let index be valid
      var question=quiz[index];
      //ask the question
      var answer=prompt(question.question+" ["+question.choices.join("] [")+"]");
      //exit on false
      if(!answer) return alert("Goodbye! Your score is "+score);
      //check if user was right
      if(answer===question.correct){
        alert("Yes. Youre right!");
        score++;
     }else{
       alert("Nope it was "+question.correct);
    }
   //procceed to the next question
   ask(index+1);//next question
}

//lets start
ask(0);

You can play it at http://jsbin.com/wocuzajoma/edit?console

Upvotes: 1

Related Questions