2016-12-27 4 views
1

Я хочу создать функцию, которая динамически отправляет все видимое имя серии в экземпляре Highchart функции PHP. Например, на этой диаграмме я хочу получить этот массив: [Salle, PR]. Если я нажму на Интернет, серия станет видимой, и я хочу получить [Salle, Internet, PR].Highcharts - получить видимое название серии динамически

Для этого я попытался использовать событие legendItemClick и сделать функцию, которая проверяет, есть ли каждая серия, чтобы добавить ее в массив, но я не могу понять, как использовать видимую опцию для этого.

У вас есть идея?

В настоящее время, у меня нет много кода:

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» после инициализации, он не отправляет «Интернет» и «PR», у меня ничего нет в консоли. Затем, если я нажму на «Salle», чтобы сделать его видимым, у меня есть только «Salle» на консоли, когда мне нужно иметь «Salle», «Internet», «PR». Когда я впервые нажимаю «Интернет», он отправляет только «Саль». И когда я нажимаю второй раз, он отправляет только «Salle» и «Internet», где он должен показывать мне «Salle», «Internet» и «PR». –

+0

Можете ли вы сделать jsfiddle для своего кода? Было бы легче обнаружить проблему. В моем примере (http://jsfiddle.net/op8142z0/) вы можете видеть, что он работает. –

+0

Я исправил его. Это потому, что я установил серию с options.series.push. Я ставлю прямо в опции, и теперь он работает. Большое спасибо за вашу помощь! –

Смежные вопросы