html实现:请设计一个调查问卷网页,并且在提交后弹出提交成功窗口并保存数据且在问卷下方绘制出饼图,饼图包含了各个问题的各个选项的占比且数据能够实时更新
时间: 2024-03-17 07:47:46 浏览: 123
好的,这是一个需要前后端协作完成的任务。我先从前端方面给你一个简单的思路和代码示例。
首先,我们需要设计调查问卷页面的布局和样式。可以使用HTML和CSS来实现。例如:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>调查问卷</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@antv/g2@3.5.0/dist/g2.min.js"></script>
</head>
<body>
<h1>调查问卷</h1>
<form action="#" method="post">
<fieldset>
<legend>问题1:你最喜欢的颜色是什么?</legend>
<input type="radio" name="question1" value="red">红色
<input type="radio" name="question1" value="green">绿色
<input type="radio" name="question1" value="blue">蓝色
</fieldset>
<fieldset>
<legend>问题2:你最喜欢的水果是什么?</legend>
<input type="radio" name="question2" value="apple">苹果
<input type="radio" name="question2" value="banana">香蕉
<input type="radio" name="question2" value="orange">橙子
</fieldset>
<input type="submit" value="提交">
</form>
<div id="chart"></div>
<script type="text/javascript">
// 在这里编写前端代码
</script>
</body>
</html>
```
这是一个包含两个问题的调查问卷页面。我们使用了`<fieldset>`和`<legend>`标签来分组和描述问题,使用了`<input>`标签来创建单选框。注意`<input>`标签的`name`属性需要设置为问题的名称,这样在后端处理数据时才能正确识别问题和选项。另外,我们在页面底部预留了一个`<div>`标签来用于显示饼图。
接下来,我们需要在页面上添加一些JavaScript代码来实现以下功能:
1. 当用户点击提交按钮时,阻止表单默认的提交行为,使用AJAX将表单数据发送到后端。
2. 当后端返回数据时,显示提交成功窗口,并将数据保存到本地。
3. 使用AntV G2库绘制饼图,并将饼图插入到页面底部的`<div>`标签中。
```javascript
// 获取表单元素
var form = document.querySelector('form');
// 监听表单提交事件
form.addEventListener('submit', function(event) {
// 阻止默认的表单提交行为
event.preventDefault();
// 获取表单数据
var formData = new FormData(form);
// 发送AJAX请求
var xhr = new XMLHttpRequest();
xhr.open('POST', '/api/submit');
xhr.send(formData);
// 显示提交成功窗口
alert('提交成功!');
// 保存数据到本地
localStorage.setItem('formData', JSON.stringify(Object.fromEntries(formData.entries())));
// 绘制饼图
var data = {
'红色': 0,
'绿色': 0,
'蓝色': 0,
'苹果': 0,
'香蕉': 0,
'橙子': 0
};
formData.forEach(function(value, key) {
data[value]++;
});
var chart = new G2.Chart({
container: 'chart',
forceFit: true,
height: 400,
padding: [20, 100, 20, 20]
});
chart.source(Object.entries(data).map(function([key, value]) {
return { item: key, count: value };
}));
chart.coord('theta', {
radius: 0.75,
innerRadius: 0.6
});
chart.intervalStack()
.position('count')
.color('item')
.label('count', {
offset: -15,
textStyle: {
fill: '#fff',
shadowBlur: 2,
shadowColor: 'rgba(0, 0, 0, .45)'
}
});
chart.render();
});
```
这段代码使用了`XMLHttpRequest`对象来发送AJAX请求,将表单数据发送到后端的`/api/submit`接口。在接收到响应后,我们使用`localStorage`对象将表单数据保存到本地。然后,我们使用AntV G2库创建一个饼图,并将饼图插入到页面底部的`<div>`标签中。饼图的数据来自于表单数据,我们使用了`Object.fromEntries()`和`Object.entries()`函数来将FormData对象转化为普通的JavaScript对象。
到这里,前端的任务就完成了。后端的任务包括接收表单数据、将数据保存到数据库中、返回数据给前端等。由于涉及到后端编程语言和数据库的选择,这里就不再赘述了。
阅读全文