HighCharts动态更改图表类型

时间:2012-05-18 18:02:27

标签: javascript highcharts

在ASP.NET站点中使用HighCharts 2.2.3。 有关代码示例,请参阅http://jsfiddle.net/wergeld/TDLvc/。 我的网站设置与jsFiddle显示的有点不同。 我更改系列的函数存在于一个包含的JS文件中,并且函数的调用与图表创建JS代码没有“内联”(尽管它仍然包含在文档就绪的jquery中)。

我有两个问题,其中一个可以在jsFiddle中看到。 1)更改图表类型时,看起来yAxis指定会丢失。您可以看到我最初有2个yAxis,在您更改图表类型后,顶部轴不再具有值标签(表示图表数据仅使用底部轴(第一个yAxis))。 2)在FF或IE下运行时,我在调用的行上出现错误:

data: serie.options.data

错误是: c不是构造函数 55号线 在highcharts.js中(这是最小文件)。

使用highcharts.src.js我现在可以看到错误是: typeClass不是构造函数

这是在src.js的8789行: serie = new typeClass();

请参阅更新的jsFiddle:选择Point作为图表类型:http://jsfiddle.net/wergeld/nS4Ny/1/。 这将引发该错误。

2 个答案:

答案 0 :(得分:7)

此问题是我们的下拉值的大写。更改了检查:

newType = newType.toLowerCase();

现在图表类型更改很有效。完整代码:

function changeType(chart, series, newType) {
        newType = newType.toLowerCase();
        for (var i = 0; i < series.length; i++) {
            series = series[0];
            try {
                series.chart.addSeries({
                    type: newType,
                    stack: series.stack,
                    yaxis: series.yaxis,
                    name: series.name,
                    color: series.color,
                    data: series.options.data
                },
                false);
                series.remove();
            } catch (e) {
                alert(newType & ': ' & e);
            }
        }
    }

答案 1 :(得分:0)

对于偶然发现这个的人来说...... 您必须删除图表系列#39;从最后到第一。还记得重绘最后一个系列,否则你的更改不会显示:)

function changeChartType(chart, type, redraw) {
    var seriesOptions = new Array(chart.series.length);
    for (var i = 0; i < chart.series.length; i++) {
        var series = chart.series[i];
        seriesOptions[i] = {
            type: type,
            name: series.name,
            color: series.color,
            dashStyle: series.options.dashStyle,
            lineWidth: series.options.lineWidth,
            marker: series.options.marker,
            dataLabels: series.options.dataLabels,
            enableMouseTracking: series.options.enableMouseTracking,
            data: series.options.data,
            isRegressionLine: series.options.isRegressionLine
        };
    }
    for (var i = chart.series.length - 1; i >= 0; i--) {
        chart.series[i].destroy();
    }
    for (var i = 0; i < seriesOptions.length; i++) {
        var newSeries = chart.addSeries(seriesOptions[i], redraw && i == seriesOptions.length - 1);
    }
    chart.currentType = type;
}