仿造问卷星--开发一套调查问卷设计工具(3/3)--完整流程

简介: 仿造问卷星--开发一套调查问卷设计工具(3/3)--完整流程

1,定义一个结果的对象:

let resultObj = {
  id: 0,
  name: "",
  questions: [],
};

id,name和questions分别对应问卷id,问卷名称和问卷题目。

2,结果赋值

用户点击生成问卷按钮时, 分别从id和name文本框中获取值 --赋值给resultObj

resultObj.id = +document.getElementById("qid").value.trim();
    resultObj.name = document.getElementById("qname").value.trim();

将上节课拿到的question赋值给刚刚定义的对象:

resultObj.questions = questions;
  resultJson = JSON.stringify(resultObj);
  console.log(resultObj);
  

打印输出结果:

json结果:

{
    "id": 1,
    "name": "测试问卷",
    "questions": [
        {
            "id": 1,
            "title": "题目1",
            "question_type": "radio",
            "question_type_text": "单选题",
            "options": [
                {
                    "option_id": "A",
                    "option_value": "选项1"
                },
                {
                    "option_id": "B",
                    "option_value": "选项2"
                },
                {
                    "option_id": "C",
                    "option_value": "选项3"
                }
            ]
        },
        {
            "id": 2,
            "title": "题目2",
            "question_type": "checkbox",
            "question_type_text": "多选题",
            "options": [
                {
                    "option_id": "A",
                    "option_value": "选项4"
                },
                {
                    "option_id": "B",
                    "option_value": "选项5"
                },
                {
                    "option_id": "C",
                    "option_value": "选项6"
                }
            ]
        },
        {
            "id": 3,
            "title": "单行文本题",
            "question_type": "input",
            "question_type_text": "填空题"
        }
    ]
}

3,pretty-print-json的使用

引入pretty-print-json,将上述json输出结果,格式化并打印到json结果文本框中:

import { prettyPrintJson } from "pretty-print-json";
document.getElementById("json-preview").innerHTML =
    prettyPrintJson.toHtml(resultObj);

结果如下图:

4,copy-to-clipboard的使用

拷贝功能:

点击copy json按钮时,将jison数据拷贝到剪切板,因为拷贝的是一个字符串,而不是对象,这里需要通过将对象转换为字符串,然后进行copy操作:

首先定义一个字符串:

let resultJson = "";

将对象转换为字符串,并赋值给resultJson

resultJson = JSON.stringify(resultObj);

引入copy-to-clipboard依赖:

import copy from "copy-to-clipboard";

将resultJson拷贝到剪切板:

document.getElementById("copy").onclick = () => {
  copy(resultJson);
  alert("已复制到剪贴板");
};

拷贝弹框:

5,gotpl的使用

html游览功能

这是使用到gotpl依赖,它的作用是把一段模板用给定的数据对象渲染出来。

模板已经提前写好了,直接copy拿走:

//模板
const tpl = `
<div class="question">
  <div class="row">
    问卷ID:<%= id %>
  </div>
  <div class="row">
    问卷名称:<%= name %>
  </div>
  <% for(var i=0, l=questions.length; i<l; ++i){ %>
    <% var item = questions[i]; %>
    <div class="question-wrap">
      <div class="question-title"><%= item.id %>. <%= item.title %>【<%=item.question_type_text %>】</div>
      <% if(item.question_type === 'input'){ %>
        <div class="input">
          <input type="text" name="<%= item.id %>" />
        </div>
      <% }else if(item.question_type === 'radio'){ %>
        <div class="radio">
          <% for(var j=0, k=item.options.length; j<k; ++j){ %>
            <label class="label">
              <input type="radio" name="<%= item.id %>" value="<%= item.options[j].option_id %>" />
              <%= item.options[j].option_id %>.
              <%= item.options[j].option_value %>
            </label>
          <% } %>
        </div>
      <% }else if(item.question_type === 'checkbox'){ %>
        <div class="checkbox">
          <% for(var j=0, k=item.options.length; j<k; ++j){ %>
            <label class="label">
              <input type="checkbox" name="<%= item.id %>" value="<%= item.options[j].option_id %>" />
              <%= item.options[j].option_id %>.
              <%= item.options[j].option_value %>
            </label>
          <% } %>
        </div>
      <% } %>
    </div>
  <% } %>
</div>
`;

引入gotpl依赖:

import gotpl from "gotpl";

利用gotpl进行渲染模板—里面参数是前面是模板,后面是数据对象

document.getElementById("html-preview").innerHTML = gotpl.render(
        tpl,
        resultObj
    );

6,最终结果展示

生成问卷游览结果如下图(红框内容)

通过这个问卷编辑工具,我们手工编辑多套题,不用一道一道录入,就可批量完成问卷调查的设计工作。

目录
相关文章
|
安全 Java 数据安全/隐私保护
代码混淆技术探究与工具选择
代码混淆技术探究与工具选择
229 0
|
机器学习/深度学习 分布式计算 算法
Spark中的机器学习库MLlib是什么?请解释其作用和常用算法。
Spark中的机器学习库MLlib是什么?请解释其作用和常用算法。
576 0
|
缓存 应用服务中间件 网络安全
Nginx 防止DDOS攻击
分布式拒绝服务攻击(DDoS)指的是通过多台机器向一个服务或者网站发送大量看似合法的数据包使其网络阻塞、资源耗尽从而不能为正常用户提供正常服务的攻击手段。
3087 0
|
10月前
|
Web App开发 编解码 算法
怎么实现实时无延迟的体育电竞动画直播
实时无延迟动画直播需关注技术方案、实现步骤与专业解决方案。技术上可选WebRTC(低至100-500ms延迟,互动性强)、低延迟HLS/CMAF(1-3秒延迟,兼容性好)和RTMP(传统协议,2-5秒延迟)。实现步骤包括采集端设置(高性能编码、稳定网络)、传输优化(CDN节点选择、抗丢包协议)及播放端优化(低延迟模式、自适应码率)。专业方案有云服务(AWS、Azure、阿里云)和专用平台(Millicast、Wowza)。注意完全无延迟不可行,需权衡画质与稳定性,并考虑终端兼容性和成本。代码示例展示了比赛数据处理逻辑,涉及匹配ID、状态、计划与关注等功能。
533 11
|
12月前
|
算法 定位技术 vr&ar
基于WebGIS技术的校园地图导航系统解决方案
本文提出了一套基于WebGIS技术的校园地图导航系统构建与优化方案,通过校园三维地图、路线导航、特色路线、位置分享等核心功能机框架设计,旨在为用户提供高效、智能、个性化的导航体验。
783 0
基于WebGIS技术的校园地图导航系统解决方案
|
机器学习/深度学习 运维 算法
[ICDE2024]多正常模式感知的频域异常检测算法MACE
阿里云计算平台大数据基础工程技术团队主导,与浙江大学合作的论文《Learning Multi-Pattern Normalities in the Frequency Domain for Efficient Time Series Anomaly Detection》被ICDE2024收录,该论文解决了云服务环境中不同服务存在不同正常模式,而传统神经网络一个训练好的模型只能较好捕捉一种或少数几种正常模式的问题,该论文提出的方法可以使用一个统一模型对不同服务进行检测,就达到比为每一个服务定制一个模型的SOTA方法更好的效果。
ADI
|
前端开发
[project]element-ui 按需加载自定义主题姿势
[project]element-ui 按需加载自定义主题姿势
ADI
641 0
|
机器学习/深度学习 自然语言处理 PyTorch
面向自然语言处理的迁移学习(三)(3)
面向自然语言处理的迁移学习(三)
291 0
|
存储 缓存
解决Gradle: Connection timed out问题
解决Gradle: Connection timed out问题
6041 0
|
负载均衡 应用服务中间件 Linux
CentOS7下python3+Flask+uWSGI+Nginx+Supervisor环境搭建
在生产环境中通常用uwsgi作为Flask的web服务网关,通过nginx反向代理进行负载均衡,通过supervior进行服务进行的管理。这一套搭下来还是有一些坑要踩,本文通过一个简单的Flask web应用记录了CentOS7下python3+Flask+uWSGI+Nginx+Supervisor环境搭建的全过程,以及一些注意事项,以免遗忘。
586 0

热门文章

最新文章