RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 601266
Accepted
ilya1099
ilya1099
Asked:2020-12-09 02:15:56 +0000 UTC2020-12-09 02:15:56 +0000 UTC 2020-12-09 02:15:56 +0000 UTC

在测试中将单选更改为复选框

  • 772

亲爱的论坛用户,有一个测试代码(下面的代码)取值由<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>

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    alexoander
    2020-12-09T18:07:38Z2020-12-09T18:07:38Z

    好吧,首先,您应该将所有内容替换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) 解析答案字符串以便于比较。)

    验证取决于您选择的响应数组的“样式”。如果我描述的有点“难”,那么具体写的不清楚,我会尽量补充答案。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5