2016-03-12 179 views
0

我试图做一个简单的javascript测验应用程序,使用radio按钮。我几乎完成了应用程序,但是如果我想向allQuestions数组添加一个问题,该数组的选项不等于3(例如2或4)。 例如,我可以做些什么来删除或添加radio按钮,具体取决于问题的选项数量,例如,问题1只有2个选项,但3 radio按钮&问题2有4个选项,但有3个radio按钮。 代码:动态添加单选按钮

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 
 
    } 
 
    /* 
 
    \t { 
 
    \t \t question: "Who is the Prime Minister of America?", 
 
    \t \t choices: ["Donald Trump","Barack Obama","Hilary Clinton"], 
 
    \t \t correctAnswer:1 
 
    \t }, 
 

 
    \t { 
 
    \t \t question: "Who is the Prime Minister of America?", 
 
    \t \t choices: ["Donald Trump","Barack Obama","Hilary Clinton"], 
 
    \t \t correctAnswer:1 
 
    \t }, 
 

 
    \t { 
 
    \t \t question: "Who is the Prime Minister of America?", 
 
    \t \t choices: ["Donald Trump","Barack Obama","Hilary Clinton"], 
 
    \t \t correctAnswer:1 
 
    \t }, 
 

 
    \t { 
 
    \t \t question: "Who is the Prime Minister of America?", 
 
    \t \t choices: ["Donald Trump","Barack Obama","Hilary Clinton"], 
 
    \t \t correctAnswer:1 
 
    \t }, 
 

 
    \t { 
 
    \t \t question: "Who is the Prime Minister of America?", 
 
    \t \t choices: ["Donald Trump","Barack Obama","Hilary Clinton"], 
 
    \t \t correctAnswer:1 
 
    \t } \t */ 
 
]; 
 

 

 
$(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>

这里是JSFiddle

+0

@JacobGray,我的坏...但无论如何,这些应该是假的问题..我会改变所有的问题,一旦我完成了代码.. – Rashid

+0

你可以添加更多的细节问题,特别是关于这个问题? –

+0

@JacobGray我编辑了这个问题,希望它现在更有意义。 – Rashid

回答

1

试试这样说:我还编辑了的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); 
} 

顺便说一句,做动态数据绑定与ui,我建议你使用Angular js,ng-repeat,这使得代码看起来更好。

+1

@nign工作谢谢..我知道代码是非常丑陋的,而且重复,但我正在学习..我是一个绝对的初学者。这是我的第一块代码,它本身需要三天完成..然而要学习Angular,js .. – Rashid

+0

@ nign ..我承认你的诚实反馈.. – Rashid

+0

@Rashid我不是说你的代码很丑,你在jsfiddle中的初始代码很棒。我只是不喜欢把HTML代码放在JS字符串中(很难调试,找不到标签等)。与其他类似angular的库一样,我们可以避免使用这种“HTML字符串”。 – nlgn

0

你可能想尝试每个循环:

$(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 
});