我正在尝试使用数据来绘制带有谷歌图表的图表。 我有几个不同的CSV文件,当我选择其他选项时,我正在尝试使用不同的文件。第一个文件正确加载并显示图表,但$(“#selection”)。change(...)不起作用..我的代码:
<html>
<head>
<title>Google charts</title>
<script src="https://www.google.com/jsapi"></script>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="https://jquery-csv.googlecode.com/files/jquery.csv-0.71.js"></script>
<script type='text/javascript'>
google.load("visualization", "1", {packages: ["corechart"]});
google.setOnLoadCallback(function() {
$(document).ready(function run(){
$("#selection").val("file1.csv");
var filename = "file1.csv";
drawChartfromCSV();
$("#selection").change(function() {
filename = ("#selection").val();
drawChartfromCSV();
});
function drawChartfromCSV() {
$.get(filename, function(csvString) {
$("#chart").html(csvString);
var arrayData = $.csv.toArrays(csvString, {onParseValue: $.csv.hooks.castToScalar});
var data = new google.visualization.arrayToDataTable(arrayData);
var view = new google.visualization.DataView(data);
view.setColumns([0, 1]);
var options = {
title: "title haxis",
hAxis: {title: data.getColumnLabel(0), minValue: data.getColumnRange(0).min, maxValue: data.getColumnRange(0).max},
vAxis: {title: data.getColumnLabel(1), minValue: data.getColumnRange(1).min, maxValue: data.getColumnRange(1).max},
legend: 'none'
};
var chart = new google.visualization.LineChart(document.getElementById('csv2chart'));
chart.draw(view, options);
});
}
});
});
</script>
</head>
<body>
Select a file
<select id="selection">
<option value="file1.csv">file1</option>
<option value="file2.csv">file2</option>
<option value="file3.csv">file3</option>
</select>
<div id="csv2chart" style="width: 900px; height: 500px;"> </div>
</body>
答案 0 :(得分:2)
代码中有错误
$("#selection").change(function() {
//the $ was missing before ("#selection").val()
filename = $("#selection").val();
drawChartfromCSV();
});
答案 1 :(得分:0)
你首先需要清除图表,你错过了前面的$(&#34;#selection&#34;)。val(); !这应该可以解决您的问题:
$("#selection").change(function() {
chart.clearChart()
filename = $("#selection").val();
drawChartfromCSV();
});
我认为你必须首先检查图表是否已经存在,如果不是清除图表
答案 2 :(得分:0)
正如其他人所指出的,$("#selection").change(function() {...});
代码中存在语法错误,但您还应删除已包含代码的$(document).ready(function run(){...});
。来自谷歌加载器的回调可以在文档&#34;准备好&#34;之后运行。火,所以你的内部功能可能永远不会运行。如果等待文档准备在您的代码中很重要,您可以遵循javascript的一般最佳实践并将图表代码粘贴在页面底部,或者您可以执行以下操作:
function run() {
// chart code here
}
var state = {
ready: false,
loaded: false
};
google.load("visualization", "1", {packages: ["corechart"], callback: function () {
state.loaded = true;
if (state.ready) {
run();
}
}});
$(document).ready(function () {
state.ready= true;
if (state.loaded) {
run();
}
});