JS实现简单的选择题测评系统代码思路详解(demo)


Posted in Javascript onSeptember 03, 2017

包含内容:JS封装表单,JS校验表单

说是测评系统,感觉只能算是一个小小的Demo,很水,,没有数据库库,,仅使用JS做简单的选择题测评系统

--------------------------------------------------------------------------------

一、设计思路

表单封装:

【1】由于采用JS封装提交所以,不需要form标签

【2】放置多个input标签,作为输入项

【3】编写JS获取输入项,并通过get方式提交到另一个页面

校验表单(显示结果)

【1】获取get传入的参数

【2】通过JS解析

【3】显示到相应位置

--------------------------------------------------------------------------------

二、参考源码如下

request.html

<html>
<head>
  <title>考试系统</title>
  <meta http-equiv="accept-charset" charset="utf-8">
  <script src="jquery.min.js"></script>
  <script type="text/javascript">
    function getjson() {
      var radio = new Array();
      for (var i = 1; i <= 5; i++) {//获取radio的值
        var radio_name = new String("radio_" + i);
        radio[i - 1] = $('input:radio[name=' + radio_name + ']:checked').val()
      }
      for (var i = 1; i <= 2; i++) {//获取checkbox的的输入
        var checkbox_name = new String("checkbox_" + i);
        var chk_value = [];
        $('input:checkbox[name=' + checkbox_name + ']:checked').each(function () {
          chk_value.push($(this).val());
        });
        radio[i + 4] = "";//置为空
        for (var j = 0; j < chk_value.length; j++) {
          radio[i + 4] = radio[i + 4] + chk_value[j];
        }
      }
      //数组转json串
      var json = JSON.stringify(radio);
      return json;
    }
    function my_confirm() {
      var json = getjson();
      var msg = "您真的答案是:" + json + ",是否确认提交";
      if (confirm(msg) == true) {
        window.location.href = "result.html?radio=" + 5 + "checkbox=" + 2 + "&json=" + json;
      } else {
        return false;
      }
    }
    $(function () {
      var m = 1;
      var s = 10;
      setInterval(function () {
        if (m >= 0) {
          if (s < 10) {
            $('#time').html("剩余时间:" + m + ':0' + s);
          } else {
            $('#time').html("剩余时间:" + m + ':' + s);
          }
          s--;
          if (s < 0) {
            s = 59;
            m--;
          }
          if (m == 0 && s < 1) {
            window.location.href = "result.html?radio=" + 5 + "checkbox=" + 2 + "&json=" + getjson();
          }
        }
      }, 1000)
    })
  </script>
</head>
<body>
<h3 style="float: left">2016--2017学年期末测试题</h3>
<div id="time" style="color:red;float: right;margin: 12px 20px 0 0;padding: 0 0 0 0;font-size: xx-large"></div>
<br/><br/><br/>
<hr/>
<h4>一、单选题(每题12分,满分60分)</h4>
1.当方法遇到异常又不知如何处理时,下列() 做法是正确的。<br>
<input type="radio" name="radio_1" value="A">A、捕获异常<br>
<input type="radio" name="radio_1" value="B">B、抛出异常<br>
<input type="radio" name="radio_1" value="C">C、声明异常<br>
<input type="radio" name="radio_1" value="D">D、嵌套异常<br>
2.下列说法错误的是() <br>
<input type="radio" name="radio_2" value="A">A、在java中一个类被声明为final类型,表示该类不能被继承。<br>
<input type="radio" name="radio_2" value="B">B、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,这叫引用传递。<br>
<input type="radio" name="radio_2" value="C">C、一个类不能既被声明为 abstract,又被声明为final。<br>
<input type="radio" name="radio_2" value="D">D、方法的覆盖(Overriding)和重载(Overloading)是Java多态性的表现,他们没有区别。<br>
3.下列创建数组的方法哪个是错误的? <br>
<input type="radio" name="radio_3" value="A">A、Date[] arr = new Date[5];<br>
<input type="radio" name="radio_3" value="B">B、Date arr[] = new Date[];<br>
<input type="radio" name="radio_3" value="C">C、Date arr[][] = new Date[4][5];<br>
<input type="radio" name="radio_3" value="D">D、Date arr[][] = new Date[4][];<br>
4.在读文件Employee.txt 时,可以直接使用该文件作为参数的类是() <br>
<input type="radio" name="radio_4" value="A">A、BufferedReader<br>
<input type="radio" name="radio_4" value="B">B、FileInputStream<br>
<input type="radio" name="radio_4" value="C">C、DataOutputStream<br>
<input type="radio" name="radio_4" value="D">D、DataInputStream<br>
5.下列关于线程的说法中,错误的是? <br>
<input type="radio" name="radio_5" value="A">A、线程必须通过方法start() 来启动。<br>
<input type="radio" name="radio_5" value="B">B、线程创建后,其优先级是可以改变的。<br>
<input type="radio" name="radio_5" value="C">C、实现Runnable接口或者从Thread类派生的线程类没有区别。<br>
<input type="radio" name="radio_5" value="D">D、当对象用synchronized 修饰时,表明该对象在任一时刻只能由一个线程访问。<br>
<br/>
<h4>二、多选题(每题20分,满分40分,错选、少选、多选不得分)</h4>
6.下列说法正确的是() <br>
<input type="checkbox" name="checkbox_1" value="A">A、在java中一个类被声明为final类型,表示该类不能被继承。<br>
<input type="checkbox" name="checkbox_1" value="B">B、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,这叫引用传递。<br>
<input type="checkbox" name="checkbox_1" value="C">C、一个类不能既被声明为 abstract,又被声明为final。<br>
<input type="checkbox" name="checkbox_1" value="D">D、方法的覆盖(Overriding)和重载(Overloading)是Java多态性的表现,他们没有区别。<br>
7.当方法遇到异常又不知如何处理时,下列() 做法是不正确的。<br>
<input type="checkbox" name="checkbox_2" value="A">A、捕获异常<br>
<input type="checkbox" name="checkbox_2" value="B">B、抛出异常<br>
<input type="checkbox" name="checkbox_2" value="C">C、声明异常<br>
<input type="checkbox" name="checkbox_2" value="D">D、嵌套异常<br>
<hr/>
<input type="button" onclick="my_confirm()" value="考试完成">
</body>
</html>

--------------------------------------------------------------------------------

result.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>考试结果</title>
  <script src="jquery.min.js"></script>
  <script>

    //获取url中的参数
    function getUrlParam(name) {
      var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
      var r = window.location.search.substr(1).match(reg); //匹配目标参数
      if (r != null) return unescape(r[2]);
      return null; //返回参数值
    }
    function showResult() {
      var answer = ["B", "D", "B", "B", "D", "ABC", "ACD"];//标准答案
      var answer_score = [12, 12, 12, 12, 12, 20, 20];//答案的分数
      var user_answer = JSON.parse(getUrlParam("json"));//获取用户答案
      var radio_num = parseInt(getUrlParam("radio"));//获取单选个数
      var checkbox_num = parseInt(getUrlParam("checkbox"));//获取多选个数
      var radio_result = 0;//单选分数
      var checkbox_result = 0;//多选分数
      var radio_right_num = 0;//单选答对个数
      var checkbox_right_num = 0;//多选答对个数
      var result = 0;//总分数
      var user_answer_result = new Array();//用户没到题的答题情况
      for (var i = 0; i < user_answer.length; i++) {
        if (user_answer[i] == answer[i]) {
          if (i < radio_num) {
            radio_result = radio_result + answer_score[i];
            radio_right_num++;
          } else {
            checkbox_result = checkbox_result + answer_score[i];
            checkbox_right_num++;
          }
          user_answer_result[i] = "正确";
        } else {
          user_answer_result[i] = "错误";
        }
      }
      result = checkbox_result + radio_result;
      //结果展示
      var show_result1;
      var show_result2;
      var show_result3;
      var show_result4;
      var show_result5;
      var show_result6;
      show_result1 = "你的答案结果为:";
      for (var i = 0; i < user_answer.length; i++) {
        show_result1 = show_result1 + (i + 1) + ":" + user_answer_result[i] + "; ";
      }
      show_result2 = "总题目个数:" + user_answer.length;
      show_result3 = "答对单选题题目个数:" + radio_right_num + "; 得分:" + radio_result;
      show_result4 = "答对多选题题目个数:" + checkbox_right_num + "; 得分:" + checkbox_result;
      show_result5 = "答错题目个数:" + (user_answer.length - radio_right_num - checkbox_right_num);
      show_result6 = " 本次考试总成绩为:" + result;
      $("p#show_result1").html(show_result1);
      $("p#show_result2").html(show_result2);
      $("p#show_result3").html(show_result3);
      $("p#show_result4").html(show_result4);
      $("p#show_result5").html(show_result5);
      $("p#show_result6").html(show_result6);
    }
  </script>
</head>
<body>
<h2>考试结束!</h2>
<hr/>
<input type="button" onclick="showResult()" value="查看结果">
<p id="show_result1">
<p>
<hr/>
<p id="show_result2"></p>
<p id="show_result3"></p>
<p id="show_result4"></p>
<p id="show_result5"></p>
<hr/>
<p id="show_result6"></p>
</body>
</html>

结果如下图:

JS实现简单的选择题测评系统代码思路详解(demo)

总结

以上所述是小编给大家介绍的JS实现简单的选择题测评系统代码思路详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
jquery下checked取值问题的解决方法
Aug 09 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
Dec 30 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
Jun 08 Javascript
原生JS实现图片轮播与淡入效果的简单实例
Aug 21 Javascript
原生js编写焦点图效果
Dec 08 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
Mar 04 Javascript
Vue递归实现树形菜单方法实例
Nov 06 Javascript
微信小程序实现禁止分享代码实例
Oct 19 Javascript
对vuex中getters计算过滤操作详解
Nov 06 Javascript
js实现带箭头的进度流程
Mar 26 Javascript
JS实现页面内跳转的简单代码
Sep 03 #Javascript
初探JavaScript 面向对象(推荐)
Sep 03 #Javascript
jquery+css实现下拉列表功能
Sep 03 #jQuery
使用JavaScript实现点击循环切换图片效果
Sep 03 #Javascript
jQuery中.attr()和.data()的区别分析
Sep 03 #jQuery
Angular4表单验证代码详解
Sep 03 #Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
Sep 03 #jQuery
You might like
Ajax PHP分页演示
2007/01/02 PHP
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
php缓存技术详细总结
2013/08/07 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
Python查看多台服务器进程的脚本分享
2014/06/11 Python
Python写的Socks5协议代理服务器
2014/08/06 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
python主线程捕获子线程的方法
2018/06/17 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
django自带调试服务器的使用详解
2019/08/29 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
工作证明范本(2篇)
2014/09/14 职场文书
2015年护士节慰问信
2015/03/23 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
企业计划生育责任书
2015/05/09 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python