7

在 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 不是 highcharts.js 中的第 55 行的构造函数(这是 min-ed 文件)。

使用 highcharts.src.js 我现在可以看到错误是: typeClass is not a constructor

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

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

4

2 回答 2

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);
            }
        }
    }
于 2012-05-21T13:43:48.197 回答
0

对于偶然发现此问题的任何人...您必须从最后一个到第一个删除图表系列。还记得在最后一个系列上重绘,否则您的更改将不会显示:)

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;
}
于 2015-03-11T15:10:34.590 回答