似乎需要一种更可重复的方法。硬编码所有问题的所有值是一项烦人的任务,如果您必须创建一个新测验,您将不得不重复这一点。
我不了解您的应用程序的全部范围,但我会给您一些一般性提示,以帮助您走上更清洁的解决方案。
(1) 使用类来设计你的问题。例如,您可以使用以下 CSS:
.answered { background-color: green; }
.skipped { background-color: yellow; }
如果您在回答后隐藏问题,CSS 将无关紧要,但它确实有助于证明我的观点。
(2) 避免在 HTML 中使用硬编码值(当然问题编号除外) 类似:
<div class="question" id="question1">Q.1 Do you like Milk
<select class="answer">
<option value="yes">Yes</option>
<option value="no">No</option>
<option value="skip">Goto Next Question</option>
<option value="skip_one">Skip Next Question</option>
<option value="skip_two">Skip Next 2 Questions</option>
</select><br>
<div>
<input type="submit" value="Submit" onclick='doSubmit(1)'>
</div>
</div>
我看到你id="button"
在提交按钮上使用。这是一个相当糟糕的主意,因为 ID 应该是唯一的。如果不需要,最好的方法是不要在按钮上提及 ID。
另请注意,按钮的 onclick 事件现在传递问题的 ID。以后会清楚的。
我在选择中添加了一个“答案”类,以便您稍后可以轻松检索用户的答案。
我还用选择按钮省略了 onclick 和 name 属性。我不确定 onclick 事件应该做什么(与这个问题无关?)并且 name 属性在这里似乎并不需要(同样,如果这个问题中没有提到的东西需要它,你可以添加它再次)。
(3) 使用 javascript/jQuery 来定义应该发生的事情。
$(document).ready(function() {
//These things should occur on page load:
$(".question").hide(); //Hides all questions
$("#question1").show(); //Bring back the first question.
});
//The rest will be done in the doSubmit() function:
function doSubmit (questionID) {
//get the value from the <select> in the div
var question = $("#question"+questionID);
var answer = question.find(".answer").val();
var nextquestionID = 0; //will be set in the switch case.
switch(answer) {
case "yes":
question.addClass("answered");
nextquestionID = questionID + 1;
break;
case "no":
question.addClass("answered");
nextquestionID = questionID + 1;
break;
case "skip":
question.addClass("skipped");
nextquestionID = questionID + 1;
break;
case "skip_one":
question.addClass("skipped");
var skippedquestionID = questionID + 1; //the next one will be marked as skipped
$("#question" + skippedquestionID ).addClass("skipped");
nextquestionID = questionID + 2;
break;
case "skip_two":
question.addClass("skipped");
var skippedquestionID = questionID + 1; //the next one will be marked as skipped
$("#question" + skippedquestionID ).addClass("skipped");
var skippedquestionID_2 = questionID + 2; //also the next one will be marked as skipped
$("#question" + skippedquestionID_2 ).addClass("skipped");
nextquestionID = questionID + 3;
break;
}
//Whatever was selected, now the original question must be hidden, and the new question (ID is contained in nextquestionID ) should be shown:
question.hide();
$("#question" + nextquestionID).show();
}
这应该让您进一步构建一个可重复的过程来处理用户的答案。我希望我能够说得足够清楚,以便您理解;如果没有,请随时询问:-)