1

I am trying to create a small quiz program in JavaScript. All of the questions are contained in array and each question is an object containing question itself, choices for user to choose and answer. Quiz loop through the all questions array and print the question and the options for user to choose from. I want choices to be radio buttons. I am struggling to figure out how to populate radio buttons with the questions choices text. Any idea how can do this please?

      var userChoices = document.getElementsByTagName('input[type:radio]');
      var questions = 
      [
        {
          question: "What is the capital of United Kingdom?",
          choices: ["Manchester", "Birmingham", "London", "Birmingham"],
          answer: 2
        },
        
        {
          question: "What is the capital of United States?",
          choices: ["California", "New York", "Miami", "Florida"],
          answer: 1
        }
        
        
      ];
      
      for ( var i = 0; i < questions.length; i++ ) {
        var question = questions[i].question;
        document.write ( question );
        var options = questions[i].choices;
        for ( var opt in options ) {
           for ( var radios in userChoices ) {
             userChoices[radios].value = options[opt];
             
           }
        }
        
      }
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  
  <input type="radio" name="choices"><br>
  <input type="radio" name="choices"><br>
  <input type="radio" name="choices"><br>
  <input type="radio" name="choices"><br>
  
  </body>
</html>

12
  • Have you heard of Angular.js? I think it will help you Commented May 16, 2016 at 10:46
  • @yossico: Don't you think Angular is too big for this? Commented May 16, 2016 at 10:46
  • Can you provide a JSFiddle example so i could help you ? Commented May 16, 2016 at 10:47
  • 1
    I've just started to learn javascript and been advised to stay away from libraries and frameworks until have a solid understanding of javascript itself. Thanks for your help anyway Commented May 16, 2016 at 10:51
  • 1
    @knight: Let me know if my answer is what you are looking at Commented May 16, 2016 at 11:08

2 Answers 2

3

You can simplify your JS code like below:

      var questions = 
      [
        {
          question: "What is the capital of United Kingdom?",
          choices: ["Manchester", "Birmingham", "London", "Birmingham"],
          answer: 2
        },
        
        {
          question: "What is the capital of United States?",
          choices: ["California", "New York", "Miami", "Florida"],
          answer: 1
        }
        
        
      ];
      
      for ( var i = 0; i < questions.length; i++ ) {
        var question = questions[i].question;
        document.write ( question );
        var options = questions[i].choices;
        document.body.appendChild(document.createElement("br"));
         var name = "radio"+i; 
        for ( var opt in options ) {
        
          var radioEle = document.createElement("input");
          radioEle.type = "radio";          
          radioEle.value = options[opt];
          radioEle.name = name;
          document.body.appendChild(radioEle);
          var label = document.createElement("Label");
          label.innerHTML = options[opt];
          document.body.appendChild(label);
          document.body.appendChild(document.createElement("br"));
        }
        
        document.body.appendChild(document.createElement("br"));
        
      }

Sign up to request clarification or add additional context in comments.

Comments

2

If you need more explanation I will provide it.

<script>

    window.onload = function () {

        var questions =
      [
        {
            question: "What is the capital of United Kingdom?",
            choices: ["Manchester", "Birmingham", "London", "Birmingham"],
            answer: 2
        },

        {
            question: "What is the capital of United States?",
            choices: ["California", "New York", "Miami", "Florida"],
            answer: 1
        }


      ];

        var container = document.getElementById('container');
        for (var i = 0; i < questions.length; i++) {
            var questionContainer = document.createElement('DIV');
            questionContainer.textContent = questions[i].question;

            var options = questions[i].choices;
            for (var opt in options) {
                //create radiobutton
                //append radiobutton to a div 
            }
            container.appendChild(questionContainer);
        }
    };
 </script>

5 Comments

your solution is pretty much understandable for me. My main problems is when I try to populate the radio buttons for choices like this > radiobutton.value = choices[i]; it doesn't work. can you please how can i add choices text to radio buttons. Thanks
radio button has a value attribute, but not a text attribute. You append text next to the radiobutton in to a span or just next. <input type="radio" name="wathever" value="1"> <span>First Choice</span>
thats why I 'm using radio.value = options[i]; but its not working for some reason.
You need a label for radios, bot just text
Yes, you could use following syntax <label for="firstChoiceId"> <input type="radio" id="firstChoiceId" name="wathever" value="1"> First Choice </label> But he's just starting with developing, that's why I mentioned it like before.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.