2016-12-27 52 views
1

我想创建一个函数,将Highchart实例中的所有可见系列名称动态地发送到PHP函数。 例如,在这个图表中,我想获得这个数组:[Salle,PR]。 如果我点击互联网,这个系列变得可见,我想得到[Salle,Internet,PR]。Highcharts - 动态获取可见的系列名称

为此,我尝试使用legendItemClick事件并创建一个函数,检查每个serie是否可见,以将其添加到数组中,但我无法弄清楚如何使用visible选项来执行此操作。

你有什么想法吗?

截至目前,我没有太多的代码共享:

plotOptions: { 
     series: { 
      events: { 
       legendItemClick: function(){ 

       } 
      } 
     } 
    } 

enter image description here

回答

3

如果保留指针图表所示:

var ch = Highcharts.chart(_chart_data_); 

再后来您可以访问整个图表结构。你会感兴趣的是系列数组。

ch.series[] 

它包含所有系列的数组。可见属性设置为true的系列是当前显示的系列。因此,它可能是这样的:

var ch = Highcharts.chart(... 

plotOptions: { 
     series: { 
      events: { 
       legendItemClick: function(){ 
        ch.series.forEach(function(sr){ 
         if(sr.visible){ 
          console.log(sr.name, "visible!"); 
         } 
        }); 
       } 
      } 
     } 
    } 

...); 

但是,你的方法一抓,那实际的图例点击图例当前的动作还没有被processed.so你会看到输出是在当前点击之前输出以前的状态。

所以出于这个原因被应用在事件发生后,你可以尝试使用的setTimeout让你的清单:

  events: { 
      legendItemClick: function(){ 
       setTimeout(
        function(){ 
         ch.series.forEach(
          function(sr){ 
           if(sr.visible){ 
           console.log(sr.name, "visible!"); 
           } 
          } 
         ) 
        },20); 
       } 
      } 

试试这个,检查控制台日志:http://jsfiddle.net/op8142z0/

+0

谢谢您的回答。我试过这个,但是当我第一次点击一个图例项目时,它不会发送名称给控制台。 例如,如果我在初始化后第一次点击'Salle',它不会发送'Internet'和'PR',我在控制台中没有任何东西。然后,如果我点击“Salle”使其可见,那么当我需要'Salle','Internet','PR'时,我只有控制台中的'Salle'。当我第一次点击“Internet”时,它只发送'Salle'。当我第二次点击时,它只发送'Salle'和'Internet',它会显示'Salle','Internet'和'PR' –

+0

你可以为你的代码做一个jsfiddle吗?检测问题会更容易。在我的示例(http://jsfiddle.net/op8142z0/)中,您可以看到它的工作原理。 –

+0

我修好了。这是因为我用options.series.push设置了系列。我直接投入选择,现在正在工作。 非常感谢您的帮助! –