用HTML5实现线上问卷调查
文章目录
- 用HTML5实现线上问卷调查
- 一、展示效果
- 二、实现步骤
- 三、完整代码
- 四、总结
- 五、注意事项
一、展示效果
需求分析:
- 明确目标用户群体;
- 设计问卷调查的问题和选项;
- 界面设计简洁易用
二、实现步骤
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自定义函数为多选框进行非空验证。