亲爱的论坛用户,有一个测试代码(下面的代码)取值由<input type="radio">具有相同id的块组成。检查哪个值是正确的,如果选择了项目 c,则value=1认为问题已正确回答。但我需要做出几个回答。但如果其中至少有一个是错误的,那么整个问题就被认为是错误的。也就是说,如果您需要选择 3 个选项,那么只有这 3 个已回答的选项才算作正确答案。你能帮忙实现JS验证吗?
function count() {
answer = 0;
answerBlocksCount = document.form1.getElementsByTagName("p").length;
questionsCount = document.form1.querySelectorAll('input[type=radio]').length + 1;
var ball = 0;
var good = "";
var bad = "";
var solv = 1;
for (var i = 0; i < questionsCount; i++) {
if (document.form1.elements[i].checked) {
if (document.form1.elements[i].value != 0) {
if (good != "") {
good += ", " + solv;
} else {
good += "№ " + solv;
}
} else {
if (bad != "") {
bad += ", " + solv;
} else {
bad += "№ " + solv;
}
}
solv++;
}
}
for (var i = 0; i < questionsCount; i++) {
if (document.form1.elements[i].checked) {
answer += 1;
}
}
if (answer < answerBlocksCount) {
alert("Вы не ответили на все вопросы теста!");
} else {
if (good == "") good = " нет :(";
if (bad == "") bad = " нет =)";
var answer = "<span style=color:green>Решены правильно:</span> " + good + "<br>";
if (bad == "нет") {
answer += "Неправильно: " + bad + ".";
} else {
answer += "<span style=color:red>Неправильно:</span>" + bad + "";
}
if (navigator.userAgent.toLowerCase().indexOf("gecko") > 0) {
div1 = document.getElementById('div1');
}
div1.innerHTML = answer;
div1.style.display = 'block';
var paragraphs = document.form1.getElementsByTagName("i").length;
for (s = 0; s < paragraphs.length; s++) {
if (document.form1.elements[s].checked) {
paragraphs(s).style.fontWeight = 'bold';
if (document.form1.elements[s].value != 0) {
paragraphs(s).style.color = 'green';
} else {
paragraphs(s).style.color = 'red';
}
}
}
}
}
<form name="form1" class="test">
<p>1. Вопрос 1
<br>
<input type="radio" name="a" value="1"><i>Вариант 1</i>
<br>
<input type="radio" name="a" value="0"><i>Вариант 2</i>
<br>
<input type="radio" name="a" value="0"><i>Вариант 3</i>
<br>
<input type="radio" name="a" value="0"><i>Вариант 4</i>
<br>
<input type="radio" name="a" value="0"><i>Вариант 5</i>
</p>
<p>2. Вопрос 2
<br>
<input type="radio" name="b" value="0"><i>Вариант 1</i>
<br>
<input type="radio" name="b" value="0"><i>Вариант 2</i>
<br>
<input type="radio" name="b" value="0"><i>Вариант 3</i>
<br>
<input type="radio" name="b" value="1"><i>Вариант 4</i>
<br>
<input type="radio" name="b" value="0"><i>Вариант 5</i>
</p>
<p>3. Вопрос 3
<br>
<input type="radio" name="c" value="0"><i>Вариант 1</i>
<br>
<input type="radio" name="c" value="1"><i>Вариант 2</i>
<br>
<input type="radio" name="c" value="0"><i>Вариант 3</i>
<br>
<input type="radio" name="c" value="0"><i>Вариант 4</i>
<br>
<input type="radio" name="c" value="0"><i>Вариант 5</i>
</p>
<div border="1" id="div1" style="padding:9px 0 11px 10px;margin:9px 17px;border:1px solid green;display:none;"></div>
<input type="button" value="Узнать результат" onclick="count();">
</form>
好吧,首先,您应该将所有内容替换
radio为checkbox. 这将使发布多个答案变得更加容易。关于如何检查答案以及一般情况下答案的呈现方式由您决定:1.您可以简单地制作一个数组,其中每个元素是另一个数组,描述了一个问题的答案(例如
var otv[] = [1,3,5]; var massOtv=[otv,otv,...]),然后在检查一个复选框时,将所选元素与数组进行比较。类型
if (massOtv[j][k] == checkbox[i].val())其中 i 和 j 和 l 是不同的计数器。可以有不同数量的答案选项和答案本身(即 j 计数到 massOtv.length - 即这是你的问题编号,k - 答案选项的枚举)。验证 - 如果匹配答案的数量等于 massOtv[j].length,则答案正确。2.另一种方式是可行的——您可以提前为答案“全长”制作一个数组,即 如果预期只有 5 个可能的答案,则数组为
massOtv[5]. 其中,正确的答案选项可以标记为1,错误的选项可以标记为0,并且在检查时也会逃跑。3.字符串形式的答案“2;3;5”,更容易存储,但更难解析(即在检查之前,您需要 1)将复选框中的答案选项“折叠”成一个字符串,或 2) 解析答案字符串以便于比较。)
验证取决于您选择的响应数组的“样式”。如果我描述的有点“难”,那么具体写的不清楚,我会尽量补充答案。