简体   繁体   English

动态添加单选按钮

[英]Dynamically add radio buttons

I am trying to make a simple javascript quiz application ,with radio buttons.I've almost finished making the application,but what if I want to add a question to allQuestions array, which has options not equal to 3(for example 2 or 4). 我正在尝试制作一个带有radio按钮的简单javascript测验应用程序。我几乎完成了该应用程序的制作,但是如果我想向allQuestions数组添加一个问题而不是3(例如2或4)的问题怎么办? )。 For example, what can I do to remove or add radio buttons depending on the number of options a question has,for instance, question 1 has only 2 options ,but 3 radio buttons & question 2 has 4 options but three radio buttons. 例如,我可以根据问题的选项数量来删除或添加radio按钮,例如,问题1只有2个选项,但是3个radio按钮,而问题2有4个选项,但只有三个radio按钮。 Code: 码:

 var allQuestions = [{ question: "Who is the Prime Minister of the United Kingdom?", choices: ["David Cameron", "Gordon Brown"], correctAnswer: 0 }, { question: "Who is the Prime Minister of India?", choices: ["Rahul Gandhi", "Arvind Kejrival", "Narendra Damodardas Modi","Dr.Manmohan Singh"], correctAnswer: 2 }, { question: "Who is the Prime Minister of America?", choices: ["Donald Trump", "Barack Obama", "Hilary Clinton"], correctAnswer: 1 }, { question: " Who averaged one patent for every three weeks of his life?", choices: ["Thomas Edison", "Tesla", "Einstein"], correctAnswer: 0 }, { question: "What continent is cut into two fairly equal halves by the Tropic of Capricorn?", choices: ["Africa", "South America", "Australia"], correctAnswer: 2 }, { question: "What explorer introduced pigs to North America?", choices: ["Christopher Columbus", "Galileo", "Mussorie"], correctAnswer: 0 }, { question: "What F-word is defined in physics as a “nuclear reaction in which nuclei combine to form more massive nuclei”? ", choices: ["Furnace", "Fusion", "Fission"], correctAnswer: 1 }, { question: "What was the first planet to be discovered using the telescope, in 1781?", choices: ["Uranus", "Jupiter", "Mars"], correctAnswer: 0 }, { question: "Who is the chief minister of West Bengal, India?", choices: ["Buddhadev Bhattacharya", "Jyoti Basu", "Mamta Banerjee"], correctAnswer: 2 }, { question: "Which is the fastest growing religion in the world?", choices: ["Islam", "Christianity", "Hinduism"], correctAnswer: 0 } /* { question: "Who is the Prime Minister of America?", choices: ["Donald Trump","Barack Obama","Hilary Clinton"], correctAnswer:1 }, { question: "Who is the Prime Minister of America?", choices: ["Donald Trump","Barack Obama","Hilary Clinton"], correctAnswer:1 }, { question: "Who is the Prime Minister of America?", choices: ["Donald Trump","Barack Obama","Hilary Clinton"], correctAnswer:1 }, { question: "Who is the Prime Minister of America?", choices: ["Donald Trump","Barack Obama","Hilary Clinton"], correctAnswer:1 }, { question: "Who is the Prime Minister of America?", choices: ["Donald Trump","Barack Obama","Hilary Clinton"], correctAnswer:1 } */ ]; $(document).ready(function() { var currentquestion = 0; var correctAnswers = 0; $("#container").hide(); $('#start').click(function() { $("#container").fadeIn(); $(this).hide(); }); $(function() { $("#progressbar").progressbar({ max: allQuestions.length - 1, value: 0 }); }); $('#question').html(allQuestions[currentquestion].question); $('label[for=option0]').html(allQuestions[currentquestion].choices[0] + "<br/>"); $('label[for=option1]').html(allQuestions[currentquestion].choices[1] + "<br/>"); $('label[for=option2]').html(allQuestions[currentquestion].choices[2] + "<br/>"); $("#next").click(function() { if ($("input[name=option]:checked").val() == allQuestions[currentquestion].correctAnswer) { correctAnswers++; }; currentquestion++; $(function() { $("#progressbar").progressbar({ value: currentquestion }); }); if (currentquestion < allQuestions.length) { $('#question').html(allQuestions[currentquestion].question); $('label[for=option0]').html(allQuestions[currentquestion].choices[0] + "<br/>"); $('label[for=option1]').html(allQuestions[currentquestion].choices[1] + "<br/>"); $('label[for=option2]').html(allQuestions[currentquestion].choices[2] + "<br/>"); if (currentquestion == allQuestions.length - 1) { $('#next').html("Submit"); //$('#next').off("click"); $('#next').click(function() { $("#container").hide(); $("#result").html("Your Score is " + correctAnswers + " out of " + currentquestion + " and your percentage is " + (correctAnswers * 100 / (currentquestion)) + "%").hide(); $("#result").fadeIn(1500); }); } }; }); }); 
 .button { display: inline-block; padding: 1em; background-color: #79BD9A; text-decoration: none; color: white; } body { text-align: center; } .ui-widget-header { background-image: none !important; background-color: #FF7860 !important; //Any colour can go here } label { display: inline-block; /*text-align: center;*/ } h3, #next { text-align: center; display: inline-block; border-radius: 20%; } input[name="option"] { float: left; } #form div { margin: auto; max-width: 205px; } #progressbar { margin: auto; margin-top: 20px; float: none; width: 50%; /*height: 100%;*/ } #container { text-align: center; } span { margin: 5em; padding: 3em; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" /> <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> <body> <h1>Quiz</h1> <a href="#" id="start" class="button">Let's Begin</a> <br/> <div id="container"> <h3 id="question"></h3> <form id="form"> <div> <input type="radio" name="option" value="0" id="option0" checked> <label for='option0'></label> <br/> </div> <div> <input type="radio" name="option" value="1" id="option1"> <label for='option1'></label> <br/> </div> <div> <input type="radio" name="option" value="2" id="option2"> <label for='option2'></label> <br/> </div> </form> <br/> <a href="#" id="next" class="button">Next</a> <br/> <div id="progressbar"></div> </div> <div id="result"></div> </body> 

Here is the JSFiddle 这是JSFiddle

Try this way: I also edited the jsfiddle https://jsfiddle.net/kingychiu/vLwjzx8o/16/ 尝试这种方式:我还编辑了jsfiddle https://jsfiddle.net/kingychiu/vLwjzx8o/16/

    function setupOptions(){
      $('#question').html(allQuestions[currentquestion].question);
      var options = allQuestions[currentquestion].choices;
      var formHtml ='';
      for (var i = 0; i < options.length; i++){
        formHtml += '<div><input type="radio" name="option" value="'+i+'" id="option'+i+'"><label for="option'+i+'">'+allQuestions[currentquestion].choices[i]+'<br/></label><br/></div>';
      }
      $('#form').html(formHtml);
}

Btw, to do dynamic data binding with ui, I suggest you use Angular js, the ng-repeat, which make the code look better. 顺便说一句,要使用ui进行动态数据绑定,建议您使用Angular js(即ng-repeat),这会使代码看起来更好。

You might want to try a for each loop: 您可能需要为每个循环尝试一个:

$(allQuestions).each(function( index ) {
  // Loop your entirely div + input + label and use the index to determine the question
  /*
   <div>
       <input type="radio" name="option" value="0" id="option0" checked>
       <label for='option0'></label>
       <br/>
   </div>
  */
  // Increment current question or use index
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM