javascript - 如何将图表数据加载到附加的画布
问题描述
我正在尝试使用 ChartJS 将一些数据加载到我的饼图中:
$(document).ready(function() {
var ctx = document.getElementById('myChart').getContext('2d');
data = {
datasets: [
{
data: [10, 20, 30],
backgroundColor: [
"rgba(35, 209, 96, 1)",
"rgba(50, 115, 220, 1)",
"rgba(255, 59, 96, 1)"
]
}
],
labels: ["Positive", "Neutral", "Negative"]
};
var myPieChart = new Chart(ctx, {
type: "pie",
data: data,
options: {}
});
});
当我单击按钮时,我的图表画布被附加
const appendChart = () => {
$(document).on("click", "#btnInsights", function() {
$("#extentionBody")
.empty()
.append("<canvas id='myChart'></canvas>");
});
};
但我收到以下错误:
未捕获的类型错误:无法读取 HTMLDocument 中未定义的属性“getContext”。(content.js:160) 在 l (jquery-3.3.1.min.js:2) 在 c (jquery-3.3.1.min.js:2)
解决方案
<canvas id='myChart'></canvas>
需要在此之前存在
$(document).ready(function() { });
您实际上是在调用尚不存在的东西。您的画布仅在按下按钮后才存在,这意味着编写在(document).ready()
函数上的代码将在 DOM 准备好后立即执行,技术上在您的按钮创建后立即执行,因此它不会等待用户单击它。
在添加画布填充它之后,我要做的是点击事件。
$(document).on("click", "#btnInsights", function() {
$("#extentionBody")
.empty()
.append("<canvas id='myChart'></canvas>");
if(!!document.getElementById('myChart')) {
var ctx = document.getElementById('myChart').getContext('2d');
data = {
datasets: [
{
data: [10, 20, 30],
backgroundColor: [
"rgba(35, 209, 96, 1)",
"rgba(50, 115, 220, 1)",
"rgba(255, 59, 96, 1)"
]
}
],
labels: ["Positive", "Neutral", "Negative"]
};
var myPieChart = new Chart(ctx, {
type: "pie",
data: data,
options: {}
});
}
});
推荐阅读
- node.js - 为离线分发捆绑 NPM 模块(具有所有依赖项)
- reactjs - React:如何从登录页面到重定向页面进行身份验证?
- c# - 如何编写sql可转换表达式
- javascript - 使用角度 9 进行路由延迟加载
- node.js - 发送来自表单数据的图像和来自邮递员的 JSON 数据用于节点 js
- node.js - 如何在不使用官方 MongoDB Node.js 驱动程序的情况下使用本机 nodejs 连接到 mongodb 数据库?
- javascript - 获取具有特定数据 id 的特定文件字段并使用 jQuery 清除它
- anylogic - 关于Anylogic中抢占多个资源的问题
- python - Python 3:在范围内重新定义时变量变得未解析
- arrays - 在 VHDL 中初始化数组:它究竟是如何工作的?