在Custom Legend上执行onClick功能

时间:2018-03-01 11:17:16

标签: javascript jquery chart.js legend

我添加了一个功能" Pie_onClickLegend_HighlightOnSlice(event,legendItem)"用于选项>传说> onClick,我也想将它与我的自定义图例一起使用。但我不知道如何将legendItem传递到我的图表之外。

on top my custom legend, on buttom the original legend

在顶部:我的自定义图例(onClick无效)

on buttom:" original"图例(onClick函数正常工作)

我认为问题在于我调用我的功能" Pie_onClickLegend_HighlightOnSlice"

document.getElementById('js-legend').innerHTML = 

chartTurn.generateLegend().replace(/\"0-legend"/g, 'legend');
$("#js-legend > ul > li").on("click", function(e) {
  var index = $(this).index();

  Pie_onClickLegend_HighlightOnSlice(e.originalEvent, chartTurn.legend.legendItems[index]);
  ci.update();

你有什么建议吗?我认为问题在于

chartTurn.legend.legendItems[index]

但我不知道该使用什么。

https://jsfiddle.net/stamina/x2pbnoes/89/

1 个答案:

答案 0 :(得分:0)

根据海狸的建议,我找到了解决方案。我不得不改变对我的功能的调用:

document.getElementById('js-legend').innerHTML = chartTurn.generateLegend().replace(/\"0-legend"/g, 'legend');
$("#js-legend > ul > li").on("click", function(event) {
  event = event || window.event;

  var target = event.target || event.srcElement;
  while (target.nodeName !== 'LI') {
    target = target.parentElement;
  }
  var parent = target.parentElement;
  var chart = Chart.instances[0];
  var index = Array.prototype.slice.call(parent.children).indexOf(target);
  console.log(chart.legend.legendItems[index]);

  Pie_onClickLegend_HighlightOnSlice(event.originalEvent, chart.legend.legendItems[index],chart);
})

因为我使用过" this.chart"在" Pie_onClickLegend_HighlightOnSlice",现在我还要传递我想要使用的chartInstance:

function Pie_onClickLegend_HighlightOnSlice(event, legendItem, chartInstance) {
   if (chartInstance === undefined){
       chartInstance = this.chart;
   }

   [...]
}