用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自定义函数为多选框进行非空验证。