jq+es6实现答题

实现效果,答题,单选,多选,填空题

使用技术 layui(仅样式展示),es6,jq。


效果图

代码:

<!DOCTYPE html>

<html>

  <head>

    <meta charset="utf-8" />

    <meta

      name="viewport"

      content="width=device-width, initial-scale=1, maximum-scale=1"

    />

    <title>测试 - layui</title>

    <link rel="stylesheet" href="layui/css/layui.css" />

    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

    <script src="layui/layui.js"></script>

    <style>

      h1 {

        color: red;

      }

      h2,

      .sure {

        margin: 5px 0;

      }

      .inline {

        display: inline-block;

      }

      .solution i {

        color: orange;

      }

    </style>

  </head>

  <body>

    <form

      class="layui-form"

      action=""

      style="display: flex; justify-content: space-between"

    >

      <div>

        <div class="box"></div>

        <div class="sure layui-btn">确定</div>

      </div>

      <div class="solution">

        <h1>这是答案</h1>

      </div>

    </form>

    <script>

      layui.use(['form', 'layedit', 'laydate'], function () {

        //实例化element

        var form = layui.form

        // 后台返回的数据

        var list = [

          {

            answer: 'A',

            content: '标题0',

            type: '0',

          },

          {

            answer: 'B',

            content: '标题1',

            type: '0',

          },

          {

            answer: 'A,B',

            content: '标题2',

            type: '1',

          },

          {

            answer: 'D',

            content: '标题3',

            type: '1',

          },

          {

            answer: 'D',

            content: '标题4',

            type: '1',

          },

          {

            answer: '我是一道大题的答案',

            content: '标题5',

            type: '2',

          },

          {

            answer: '我是一道大题的答案2222',

            content: '标题6',

            type: '2',

          },

        ]

        const zimu = ['A', 'B', 'C', 'D']

        list.forEach((item, index) => {

          const itemAnswer = [...item.answer.replace(/,/, '')]

          var zifuchuan = `<div>

        <h2>${item.content}</h2>`

          for (let i = 0; i < zimu.length; i++) {

            let taoZimu = zimu[i]

            // 单选题

            if (item.type === '0') {

              zifuchuan += `<div class="inline inline2 dan">

                   <input type="radio" name="${index}" value="${taoZimu}" title="${taoZimu}" ${

                itemAnswer.includes(taoZimu) ? 'checked' : ''

              } />

                  </div>`

            } else if (item.type === '1') {

              // 多选题

              zifuchuan += `<div class="inline inline2 shuang">

                     <input type="checkbox" name="${taoZimu}" value="${taoZimu}" lay-skin="primary" title="${taoZimu}" ${

                itemAnswer.includes(taoZimu) ? 'checked' : ''

              } />

               </div>`

            }

          }

          if (item.type === '2') {

            // 填空题

            zifuchuan += `<div class=" inline" data-name ="${item.type}">

                          <textarea placeholder="请输入内容" class="layui-textarea">${item.answer}</textarea>

                          </div>`

          }

          ;`</div>`

          // 动态渲染

          $('.box').append(zifuchuan)

          form.render('checkbox')

          form.render('radio')

        })

        // 获取数据

        $('.sure').click(function () {

          $('.solution').find('div').html('')

          var formData = [] //总数据

          var ckAarray //input数据

          var ckAarray2 //textarea数据

          var num = 0 //判断是否未选择

          $('.box>div').each(function () {

            ckAarray = $(this).find('.inline2').find('input:checked')

            ckAarray2 = $(this).find('.inline').find('textarea')

            var ans = ''

            // 单选题

            ckAarray.each(function (i, item) {

              ans += ckAarray.length == i + 1 ? item.value : item.value + ','

            })

            // 填空题

            ckAarray2.each(function (i, item) {

              ans += item.value

            })

            // 赋值到对象

            forDan = {

              answer: ans,

              content: $(this).find('h2').html(),

            }

            formData.push(forDan)

          })

          //   判断多少题  没有做

          formData.map((item) => {

            if (item.answer.length == 0) {

              num++

            }

          })

          if (num != 0) {

            alert(

              '总共' +

                formData.length +

                '道题! 已做答:' +

                (formData.length - num) +

                '道题,还有' +

                num +

                '道题未完成'

            )

          } else {

            console.log(formData)

            alert('恭喜你,答题完成')

            formData.forEach((item, index) => {

              var soluData = `<div><i>${index + 1}、</i> ${item.answer}</div>`

              $('.solution').append(soluData)

            })

          }

        })

        // 动态添加单选还是多选

        var typeNum = null

        var typeNum2 = null

        list.forEach(function (item) {

          if (item.type === '0') {

            typeNum++

          } else if (item.type === '1') {

            typeNum2++

          }

        })

        // 单选题

        $('.box>div').eq(0).prepend('<h1>单选题</h1>')

        // 多选题

        $('.box>div')

          .eq(typeNum2 - 1)

          .prepend('<h1>多选题</h1>')

        // 填空题

        $('.box>div')

          .eq(typeNum + typeNum2)

          .prepend('<h1>填空题</h1>')

      })

    </script>

  </body>

</html>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容