使用基于下拉列表的更新图表
Update Chart Using based on Dropdown list
我正在尝试根据 selecting 特定日期标准呈现图表。当我 select 从下拉列表中选择一个选项(例如每月)时,我希望图表呈现不同的数据集。
目前,下面的脚本没有执行上面的预期输出(当我从 selection 列表中 select daily/monthly 时它没有显示任何数据)。我在下面的代码中遗漏了什么吗?请指教
这是我的代码:
var dataDaily = [
['CVR', 'TALK'],
[90, 353]
];
var dataWeekly = [
['CVR', 'TALK'],
[225, 893]
];
var dataMonthly = [
['CVR', 'TALK'],
[1602, 4934]
];
$(function () {
// Initial chart
var chart = c3.generate({
data: {
rows: dataDaily,
type: 'pie'
}
});
// Redraw chart depending on which option is selected
$("#DataType").change(function (evt) {
var timeSelection = $("#DataType").val();
var chart = c3.generate({
data: {
rows: timeSelection,
type: 'pie'
}
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.4.10/c3.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/c3/0.4.10/c3.min.css">
<select id="DataType">
<option value="dataDaily">Daily</option>
<option value="dataWeekly">Weekly</option>
<option value="dataMonthly">Monthly</option>
</select>
<div id="chart"></div>
您还可以在这个 JSFiddle 上看到代码(和问题)的演示:http://jsfiddle.net/km97cdL3/
问题出在这一行:
var timeSelection = $("#DataType").val();
下拉列表的值是一个字符串("dataDaily"、"dataWeekly" 或 "dataMonthly"),而不是该文字字符串指定的数组变量(dataDaily
, dataWeekly
, 或 dataMonthly
).
一个快速的解决方案是评估(使用 eval()
)select 的值,这样您就可以将字符串 "transform" 放入同名数组中:
var timeSelection = eval( $("#DataType").val() );
因此最终代码如下所示:
var dataDaily = [
['CVR', 'TALK'],
[90, 353]
];
var dataWeekly = [
['CVR', 'TALK'],
[225, 893]
];
var dataMonthly = [
['CVR', 'TALK'],
[1602, 4934]
];
$(function () {
// Initial chart
var chart = c3.generate({
data: {
rows: dataDaily,
type: 'pie'
}
});
// Redraw chart depending on which option is selected
$("#DataType").change(function (evt) {
var timeSelection = eval( $("#DataType").val() );
var chart = c3.generate({
data: {
rows: timeSelection,
type: 'pie'
}
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.4.10/c3.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/c3/0.4.10/c3.min.css">
<select id="DataType">
<option value="dataDaily">Daily</option>
<option value="dataWeekly">Weekly</option>
<option value="dataMonthly">Monthly</option>
</select>
<div id="chart"></div>
您还可以在这个 JSFiddle 上看到它正常工作:http://jsfiddle.net/km97cdL3/1/
注意:在开始使用eval()
之前,您应该了解使用不当的风险。 Check this question and the comments for more details.
我正在尝试根据 selecting 特定日期标准呈现图表。当我 select 从下拉列表中选择一个选项(例如每月)时,我希望图表呈现不同的数据集。
目前,下面的脚本没有执行上面的预期输出(当我从 selection 列表中 select daily/monthly 时它没有显示任何数据)。我在下面的代码中遗漏了什么吗?请指教
这是我的代码:
var dataDaily = [
['CVR', 'TALK'],
[90, 353]
];
var dataWeekly = [
['CVR', 'TALK'],
[225, 893]
];
var dataMonthly = [
['CVR', 'TALK'],
[1602, 4934]
];
$(function () {
// Initial chart
var chart = c3.generate({
data: {
rows: dataDaily,
type: 'pie'
}
});
// Redraw chart depending on which option is selected
$("#DataType").change(function (evt) {
var timeSelection = $("#DataType").val();
var chart = c3.generate({
data: {
rows: timeSelection,
type: 'pie'
}
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.4.10/c3.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/c3/0.4.10/c3.min.css">
<select id="DataType">
<option value="dataDaily">Daily</option>
<option value="dataWeekly">Weekly</option>
<option value="dataMonthly">Monthly</option>
</select>
<div id="chart"></div>
您还可以在这个 JSFiddle 上看到代码(和问题)的演示:http://jsfiddle.net/km97cdL3/
问题出在这一行:
var timeSelection = $("#DataType").val();
下拉列表的值是一个字符串("dataDaily"、"dataWeekly" 或 "dataMonthly"),而不是该文字字符串指定的数组变量(dataDaily
, dataWeekly
, 或 dataMonthly
).
一个快速的解决方案是评估(使用 eval()
)select 的值,这样您就可以将字符串 "transform" 放入同名数组中:
var timeSelection = eval( $("#DataType").val() );
因此最终代码如下所示:
var dataDaily = [
['CVR', 'TALK'],
[90, 353]
];
var dataWeekly = [
['CVR', 'TALK'],
[225, 893]
];
var dataMonthly = [
['CVR', 'TALK'],
[1602, 4934]
];
$(function () {
// Initial chart
var chart = c3.generate({
data: {
rows: dataDaily,
type: 'pie'
}
});
// Redraw chart depending on which option is selected
$("#DataType").change(function (evt) {
var timeSelection = eval( $("#DataType").val() );
var chart = c3.generate({
data: {
rows: timeSelection,
type: 'pie'
}
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.4.10/c3.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/c3/0.4.10/c3.min.css">
<select id="DataType">
<option value="dataDaily">Daily</option>
<option value="dataWeekly">Weekly</option>
<option value="dataMonthly">Monthly</option>
</select>
<div id="chart"></div>
您还可以在这个 JSFiddle 上看到它正常工作:http://jsfiddle.net/km97cdL3/1/
注意:在开始使用eval()
之前,您应该了解使用不当的风险。 Check this question and the comments for more details.