Highcharts在具有多个系列和共享工具提示的图表之间共享工具提示

时间:2014-07-08 15:18:41

标签: javascript highcharts

我正在尝试在图表之间设置共享工具提示。只有当工具提示没有shared: true时才会很好用,如果我设置shared: true我会收到错误:

TypeError: 'undefined' is not an object (evaluating 'a[0].category') highcharts.js:3259

我准备了示例:http://jsfiddle.net/CAKQH/24408/

如果你将光标移动到第一个图表上 - 它的效果很好,如果你评论它shared: true它也有效,但是如果你在第二个图表上移动光标就会出错。

有人遇到此错误吗? 请帮我解决一下。

1 个答案:

答案 0 :(得分:6)

出现问题是因为您在一个图表上有shared: true,而在另一个图表上有默认值(false)。这是一个问题,因为tooltip.refresh方法将采用不同的路径,并根据共享集合为true或false的图表使用不同的输入。

对于tooltip.refresh方法,您可以在第8806行找到此分支in the source code

// shared tooltip, array is sent over
if (shared && !(point.series && point.series.noSharedTooltip)) {
    ....
}
// single point tooltip
else {
    ....
}

您可以通过在syncTooltip方法中进行分支来处理不同的情况(example JFiddle):

function syncTooltip(container, p) {
    var i = 0;
    for (; i < charts.length; i++) {
        if (container.id != charts[i].container.id) {
            if(charts[i].tooltip.shared) {
                charts[i].tooltip.refresh([charts[i].series[0].data[p]]);
            }
            else {
                charts[i].tooltip.refresh(charts[i].series[0].data[p]);
            }
        }
    }
}

这样,您可以在两个图表上自由地将共享设置为true或false。

不幸的是,您的plotOptions.series.point.events.mouseOver - 事件并未捕获被选中的点数#34;通过shared: true功能,您必须找到一个备用事件来正确捕捉这种情况。