首页 前端知识 用HTML5实现线上问卷调查

用HTML5实现线上问卷调查

2024-04-29 11:04:39 前端知识 前端哥 393 437 我要收藏

用HTML5实现线上问卷调查

文章目录

  • 用HTML5实现线上问卷调查
  • 一、展示效果
  • 二、实现步骤
  • 三、完整代码
  • 四、总结
  • 五、注意事项

一、展示效果

在这里插入图片描述
需求分析:

  1. 明确目标用户群体;
  2. 设计问卷调查的问题和选项;
  3. 界面设计简洁易用

二、实现步骤

1、设置CSS样式

<style>
   body {
	background-color:#CCCCCC;/*设置页面背景色为浅灰色*/
	}
   /*问卷面板样式*/
   #questionnaire{
       background-color:white; 
       padding:15px;
       margin: auto; 
       width:900px;
       text-align:center;
       font-family:"微软雅黑";
       box-shadow: 10px 10px 15px black;
   }
   /*标题样式*/
   h1{
   color:orange;    
   }
   /*水平线样式*/
   hr{
       width:80%;
       border:orange 1px solid;
       margin-bottom:15px;
   }
   /*表单样式*/
   form{
       text-align:left;
       width:80%;
       margin:auto;
   }
   /*列表选项样式*/
   li{
       margin:10px 0;
   }
   /*输入表单样式*/
   input{
       margin:10px;    
   }
   /*输入表单样式*/
   input[type="text"],input[type="tel"]{
       width:130px;
       height:20px;
       font-size:16px;
       font-family:"微软雅黑";
       border:0px;
       border-bottom:1px solid;
       outline:none;
   }
   /*按钮外区域div元素样式*/
   #btn{
       text-align:center;
   }
   /*按钮样式*/
   button{
       width:120px;
       height:40px;
       background-color:orange;
       border:0px;
       color: white;
       margin:10px;
       font-size:18px;
       font-family:"微软雅黑";
       font-weight:bold;
   }
   /*鼠标悬浮时按钮样式*/
   button:hover{
       background-color:#FF6835;
   }
    </style>

2、使用一个区域元素div在页面背景上创建问卷调查页面,在其内部添加标题、水平线并预留表单空间,定义id=”questionnaire”,以便可以使用CSS的ID选择器进行样式设置

<div id="questionnaire">
	<!--页面标题-->
	<h1>手机移动支付业务问卷调查</h1>
	<!--水平线-->
	<hr />
	<!--表单-->
	<form method="post" action="URL" onsubmit="return check()">
	</form>
</div>

3、在表单中使用有序列表标签ol和列表选项标签li制作问卷调查的问题,问题将自动显示为阿拉伯数字序号标记

<form method="post" action="URL" onsubmit="return check()">
	<ol>
		<li>您的教育程度是?</li>
		<li>您的年龄段是?</li>
		<li>您是否使用过手机移动支付业务?</li>
		<li>您了解以下哪些手机移动支付业务?(可多选)</li>
		<li>您看重以下哪些支付功能?(可多选)</li>
	</ol>
</form>

4、在问卷调查中的前3个问题均为单选题,选项使用radio 类型的标签创建;后两个问题均为多选题,选项使用checkbox类型的input标签创建,并将选项分别嵌套在label元素的首尾标签内,以便单击标签上的文字内容即可让输入框获得焦点。

<ol>
   <li>您的教育程度是?</li>
   <label>
       <input type="radio" name="q1" value="q1_1"/>
       高中 </label>
   <label>
       <input type="radio" name="q1" value="q1_2"/>
       大专 </label>
   <label>
       <input type="radio" name="q1" value="q1_3"/>
       本科 </label>
   <label>
       <input type="radio" name="q1" value="q1_4"/>
       硕士研究生 </label>
   <label>
       <input type="radio" name="q1" value="q1_5"/>
       博士及以上 </label>

   <li>您的年龄段是?</li>
   <label>
       <input type="radio" name="q2" value="q2_1"/>
       18岁以下 </label>
   <label>
       <input type="radio" name="q2" value="q2_2"/>
       18-25岁 </label>
   <label>
       <input type="radio" name="q2" value="q2_3"/>
       26-30岁 </label>
   <label>
       <input type="radio" name="q2" value="q2_4"/>
       31-35岁 </label>
   <label>
       <input type="radio" name="q2" value="q2_5"/>
       35岁以上 </label>

   <li>您是否使用过手机移动支付业务?</li>
   <label>
       <input type="radio" name="q3" value="q3_1"/>
       从未听说过 </label>
   <label>
       <input type="radio" name="q3" value="q3_2"/>
       听说过,但未使用过 </label>
   <label>
       <input type="radio" name="q3" value="q3_3"/>
       偶尔使用 </label>
   <label>
       <input type="radio" name="q3" value="q3_4"/>
       经常使用 </label>

   <li>您了解以下哪些手机移动支付业务?(可多选)</li>
   <label>
       <input type="checkbox" name="q4" value="q4_1" />
       支付宝 </label>
   <label>
       <input type="checkbox" name="q4" value="q4_2" />
       微信支付 </label>
   <label>
       <input type="checkbox" name="q4" value="q4_3" />
       电信翼支付 </label>
   <label>
       <input type="checkbox" name="q4" value="q4_4" />
       Apple Pay </label>
   <input type="checkbox" name="q4" value="q4_5" />
   以上均不了解
   </label>

   <li>您看重以下哪些支付功能?(可多选)</li>
   <label>
       <input type="checkbox" name="q5" value="q5_1" />
       话费/游戏币充值 </label>
   <br />
   <label>
       <input type="checkbox" name="q5" value="q5_2" />
       刷手机加油 </label>
   <br />
   <label>
       <input type="checkbox" name="q5" value="q5_3" />
       刷手机购物 </label>
   <br />
   <label>
       <input type="checkbox" name="q5" value="q5_4" />
       刷手机乘坐公交/轻轨/地铁 </label>
   <br />
   <input type="checkbox" name="q5" value="q5_5" />
   水电煤/有线电视/宽带远程缴费 </label>
   <br />
   <label>
       <input type="checkbox" name="q5" value="q5_6" />
       享受联盟商户的优惠折扣 </label>
   <br />
   <label>
       <input type="checkbox" name="q5" value="q5_7" />
       以上均不感兴趣 </label>
</ol>

5、在问题与选项的下方使用标签添加个人信息输入框,包括姓名、职位和联系电话。其中姓名和职位使用的是text类型,联系电话使用了tel 类型。

<label>您的姓名
   <input type="text"  name="name"/>
</label>
<label>您的职业
    <input type="text" name="position"/>
</label>
<label>联系电话
    <input type="tel" name="tel"/>
</label>

6、使用JavaScript自定义函数为多选框进行非空验证,在使用for循环对同组的所有选项元素进行遍历时判断cekoli.hcecked的返回值是否为真,为真表示当前选项为选中状态,否则表示未选中。一旦发现有选中的选项则令初始等于0的变量j自增,然后立刻跳出整个循环。最后只需要判断变量j此刻的数值是否仍然为0,如果为0则表示所有选项均未被选中,可以返回false,否则返回true。

function checkBox(name){
    //用于统计被勾选的选项数量
    var j=0;
    //获取指定name名称的同组所有复选框元素
    var checkbox = document.getElementsByName(name);
    //遍历选项组中的所有选项
    for(var i=0; i<checkbox.length;i++){
        //判当前断是否有选中的选项
        if(checkbox[i].checked){
            j++;
            //如果有选项为选中状态直接跳出遍历循环
            break;
        }      
    }   
    if(j==0)return false;
    return true;
    }

7、创建新的自定义函数check0用于完整验证问卷调查页面中的第4、5题是否为空,在该方法中依次对checkBox(name)函数进行了调用,分别填入不同的name名称(q4和q5)即可对指定的题号迅速作出判断。其中任何一题没有完成勾选都会弹出对话框并给出相关提示语句。

三、完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" >
    <title>HTML5问卷调查页面示例</title>
    <link rel="stylesheet" href="css/questionnaire.css">
    <script src="js/questionnaire.js"></script>
    <style>
        body {
    background-color:#CCCCCC;/*设置页面背景色为浅灰色*/
    }

        /*问卷面板样式*/
        #questionnaire{
            background-color:white; 
            padding:15px;
            margin: auto; 
            width:900px;
            text-align:center;
            font-family:"微软雅黑";
            box-shadow: 10px 10px 15px black;
        }

        /*标题样式*/
        h1{
        color:orange;    
        }

        /*水平线样式*/
        hr{
            width:80%;
            border:orange 1px solid;
            margin-bottom:15px;
        }

        /*表单样式*/
        form{
            text-align:left;
            width:80%;
            margin:auto;
        }

        /*列表选项样式*/
        li{
            margin:10px 0;
        }

        /*输入表单样式*/
        input{
            margin:10px;    
        }

        /*输入表单样式*/
        input[type="text"],input[type="tel"]{
            width:130px;
            height:20px;
            font-size:16px;
            font-family:"微软雅黑";
            border:0px;
            border-bottom:1px solid;
            outline:none;
        }

        /*按钮外区域div元素样式*/
        #btn{
            text-align:center;
        }

        /*按钮样式*/
        button{
            width:120px;
            height:40px;
            background-color:orange;
            border:0px;
            color: white;
            margin:10px;
            font-size:18px;
            font-family:"微软雅黑";
            font-weight:bold;
        }

        /*鼠标悬浮时按钮样式*/
        button:hover{
            background-color:#FF6835;
        }

    </style>
</head>
    <body>
        <div id="questionnaire">
            <!--页面标题-->
            <h1>手机移动支付业务问卷调查</h1>
            <!--水平线-->
            <hr />
            <!--表单-->
            <form method="post" action="URL" onsubmit="return check()">
                <ol>
                    <li>您的教育程度是?</li>
                    <label>
                        <input type="radio" name="q1" value="q1_1" required />
                        高中 </label>
                    <label>
                        <input type="radio" name="q1" value="q1_2" required />
                        大专 </label>
                    <label>
                        <input type="radio" name="q1" value="q1_3" required />
                        本科 </label>
                    <label>
                        <input type="radio" name="q1" value="q1_4" required />
                        硕士研究生 </label>
                    <label>
                        <input type="radio" name="q1" value="q1_5" required />
                        博士及以上 </label>

                    <li>您的年龄段是?</li>
                    <label>
                        <input type="radio" name="q2" value="q2_1" required />
                        18岁以下 </label>
                    <label>
                        <input type="radio" name="q2" value="q2_2" required />
                        18-25岁 </label>
                    <label>
                        <input type="radio" name="q2" value="q2_3" required />
                        26-30岁 </label>
                    <label>
                        <input type="radio" name="q2" value="q2_4" required />
                        31-35岁 </label>
                    <label>
                        <input type="radio" name="q2" value="q2_5" required />
                        35岁以上 </label>

                    <li>您是否使用过手机移动支付业务?</li>
                    <label>
                        <input type="radio" name="q3" value="q3_1" required />
                        从未听说过 </label>
                    <label>
                        <input type="radio" name="q3" value="q3_2" required />
                        听说过,但未使用过 </label>
                    <label>
                        <input type="radio" name="q3" value="q3_3" required />
                        偶尔使用 </label>
                    <label>
                        <input type="radio" name="q3" value="q3_4" required />
                        经常使用 </label>

                    <li>您了解以下哪些手机移动支付业务?(可多选)</li>
                    <label>
                        <input type="checkbox" name="q4" value="q4_1" />
                        支付宝 </label>
                    <label>
                        <input type="checkbox" name="q4" value="q4_2" />
                        微信支付 </label>
                    <label>
                        <input type="checkbox" name="q4" value="q4_3" />
                        电信翼支付 </label>
                    <label>
                        <input type="checkbox" name="q4" value="q4_4" />
                        Apple Pay </label>
                    <input type="checkbox" name="q4" value="q4_5" />
                    以上均不了解
                    </label>

                    <li>您看重以下哪些支付功能?(可多选)</li>
                    <label>
                        <input type="checkbox" name="q5" value="q5_1" />
                        话费/游戏币充值 </label>
                    <br />
                    <label>
                        <input type="checkbox" name="q5" value="q5_2" />
                        刷手机加油 </label>
                    <br />
                    <label>
                        <input type="checkbox" name="q5" value="q5_3" />
                        刷手机购物 </label>
                    <br />
                    <label>
                        <input type="checkbox" name="q5" value="q5_4" />
                        刷手机乘坐公交/轻轨/地铁 </label>
                    <br />
                    <input type="checkbox" name="q5" value="q5_5" />
                    水电煤/有线电视/宽带远程缴费 </label>
                    <br />
                    <label>
                        <input type="checkbox" name="q5" value="q5_6" />
                        享受联盟商户的优惠折扣 </label>
                    <br />
                    <label>
                        <input type="checkbox" name="q5" value="q5_7" />
                        以上均不感兴趣 </label>
                </ol>
                
                <label>您的姓名
                    <input type="text"  name="name" required />
                </label>
                <label>您的职业
                    <input type="text" name="position" required />
                </label>
                <label>联系电话
                    <input type="tel" name="tel" required />
                </label>
                
                 <div id="btn">
                    <button type="submit">提交问卷</button>
                </div>
            </form>
        </div>
    </body>
    <script>
    function checkBox(name){
    //用于统计被勾选的选项数量
    var j=0;
    //获取指定name名称的同组所有复选框元素
    var checkbox = document.getElementsByName(name);
    //遍历选项组中的所有选项
    for(var i=0; i<checkbox.length;i++){
        //判当前断是否有选中的选项
        if(checkbox[i].checked){
            j++;
            //如果有选项为选中状态直接跳出遍历循环
            break;
        }      
    }   
    if(j==0)return false;
    return true;
    }

    function check(){
        //调用checkBox(name)函数判断第4题的情况
        var q4 = checkBox("q4");        
        if(q4==false){
            alert("第4题起码要选择一个选项。");
            return false;
        }   
        //调用checkBox(name)函数判断第5题的情况    
        var q5 = checkBox("q5");    
        if(q5==false){
            alert("第5题起码要选择一个选项。");
            return false;
        }       
        return true;
    }
    </script>
</html>

四、总结

1、界面设计

  • 使用div标签在页面背景上创建问卷调查页面,在其内部添加标题、水平线并预留表单空间;

2、表单元素

  • 表单元素form设计
  • 使用有序列表标签div设计问题样式
  • 使用标签设计问题选项
  • 使用标签设计个人信息填写栏目
  • 使用标签设计问卷提交按钮

3、验证功能的实现

  • 为所有单选框添加非空验证;
  • 为个人信息栏添加非空验证;
  • 为所有多选框添加非空验证。

五、注意事项

在问卷调查中的前3个问题均为单选题,为所有radio类型的标签添加HTML5表单新增的required属性以实现非空验证,可以写成完整版required=“required”,也可以简写为required。但后面两个问题为多选题不适合为checkbox类型的元素添加required属性来进行非空验证,因为这会导致同组多选框中的每一个选项都成为必选,并不符合最少只需要选择其中一一个选项的条件,所以另外使用 JavaScript自定义函数为多选框进行非空验证。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/5999.html
标签
评论
发布的文章

AJAX和JSON

2024-05-03 19:05:37

qml 文件中 JSON的使用

2024-05-03 19:05:03

json在线格式化代码

2024-05-03 19:05:01

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!