2016-03-12 218 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 
});