4

我正在尝试根据选择特定日期标准来呈现图表。当我从下拉列表中选择一个选项(例如每月)时,我希望图表呈现不同的数据集。

目前,下面的脚本没有执行上述预期的输出(当我从选择列表中选择每日/每月时,它没有显示任何数据)。我在下面的代码中遗漏了什么吗?请指教。

这是我的代码:

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/

4

1 回答 1

4

问题出在这一行:

var timeSelection = $("#DataType").val();

下拉列表的值是一个字符串(“dataDaily”、“dataWeekly”或“dataMonthly”),而不是由该文字字符串( 、 或 )指定的dataDaily数组dataWeekly变量dataMonthly

一个快速的解决方案是评估(使用eval())选择的值,这样您就可以将字符串“转换”为同名的数组:

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(),您应该知道如果使用不当,您应该知道它的风险。检查此问题和评论以获取更多详细信息

于 2015-05-11T13:07:27.367 回答