Javascript Highcharts-动态获取可见的系列名称

Javascript Highcharts-动态获取可见的系列名称,javascript,php,highcharts,twig,symfony,Javascript,Php,Highcharts,Twig,Symfony,我想制作一个函数,将Highchart实例中所有可见的系列名称动态发送到PHP函数。 例如,在这个图表中,我想要得到这个数组:[Salle,PR]。 如果我点击互联网,我会看到这个系列,我想得到[Salle,Internet,PR] 为此,我尝试使用legendItemClick事件并创建一个函数来检查每个序列是否可见,以将其添加到数组中,但我不知道如何使用visible选项来执行此操作 你有什么想法吗 到目前为止,我没有太多代码可以共享: plotOptions: { seri

我想制作一个函数,将Highchart实例中所有可见的系列名称动态发送到PHP函数。 例如,在这个图表中,我想要得到这个数组:[Salle,PR]。 如果我点击互联网,我会看到这个系列,我想得到[Salle,Internet,PR]

为此,我尝试使用legendItemClick事件并创建一个函数来检查每个序列是否可见,以将其添加到数组中,但我不知道如何使用visible选项来执行此操作

你有什么想法吗

到目前为止,我没有太多代码可以共享:

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

                }
            }
        }
    }

如果将指针保留在图表上,如下所示:

var ch = Highcharts.chart(_chart_data_);
var ch = Highcharts.chart(...

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

...);
然后,您可以访问整个图表结构。您将感兴趣的是系列阵列

ch.series[]
它包含所有系列的数组。visible属性设置为true的系列是当前显示的系列。所以,可能是这样的:

var ch = Highcharts.chart(_chart_data_);
var ch = Highcharts.chart(...

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

...);
但是,您的方法有一个缺点,即在实际图例单击时,图例的当前操作尚未处理。因此,您将看到的输出是当前单击之前的前一状态的输出

因此,在应用事件后,您可以尝试使用setTimeout获取列表:

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

尝试此操作并查看控制台日志:

谢谢您的回答。我尝试过这个,但当我第一次点击一个图例项目时,它不会将名称发送到控制台。例如,如果我在初始化后第一次单击“Salle”,它不会发送“Internet”和“PR”,控制台中就没有任何内容。然后,如果我点击‘Salle’使其可见,我在控制台中只有‘Salle’,而我应该有‘Salle’、‘Internet’、‘PR’。当我第一次点击“Internet”时,它只发送“Salle”。当我第二次点击时,它只发送“Salle”和“Internet”,在那里它应该显示“Salle”、“Internet”和“PR”,你能为你的代码做一个jsfiddle吗?这样更容易发现问题。在我的示例()中,您可以看到它确实有效。我已经修复了它。这是因为我用options.series.push设置了series。我直接投入到选项中,它现在起作用了。非常感谢你的帮助!