javascript - 如何在标签(数据集)上触发点击事件并传递其值?

标签 javascript charts

我正在尝试触发点击数据集的标签(“其他”、“次要”)或值(因此稍后连接到特定的 URL)但当时我唯一可以检索的是 indexdatasetIndex

我正在尝试使用与此 answer 中描述的相同的原则

这是我的代码:

var ctx = $('#open_chart');
var chart = new Chart(ctx, {
  type: 'pie',
  data: {
    datasets: [{
      data: [1, 5],
      backgroundColor: ['red', 'blue'],
      weight: 1
    }],
    labels: ['Minor', 'Other']
  },
  options: {
    responsive: true,
    title: {
      display: true,
      text: 'Title',
      position: 'bottom',
      fontSize: 15,
      fontColor: '#000000'
    },
    legend: {
      display: false
    },
onHover: function(event, chartElement) {
  event.target.style.cursor = chartElement[0] ? 'pointer' : 'default';
				},
onClick: function(e) {
// var pie = this.getElementAtEvent(e)[0];
var pieNotCorrect = this.getElementAtEvent(e);
var pie = this.getElementAtEvent(e)[0];
console.log(pie)
console.log(pieNotCorrect)
var index = pie._index;
var datasetIndex = pie._datasetIndex;
	
// check which part is clicked
if (index == 0 && datasetIndex == 0) alert('First BAR Clicked!');
}
 }
   });



var newDataset = {
  data: [1, 3, 5],
  backgroundColor: ['red', 'blue', 'yellow'],
  label: 'SubStatuses',
  labels: ['Red', 'Blue', 'Yellow'],
  weight: 4
};



chart.data.datasets.push(newDataset);
chart.update();
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="chart-container" style="position: relative; height:500px; width:300px">
		<canvas id="open_chart" style="position:absolute;top:150px;" width="200" height="200"></canvas>
</div>

最佳答案

试试这个

从您的代码中删除以下代码:

var pieNotCorrect = this.getElementAtEvent(e);
var pie = this.getElementAtEvent(e)[0];
console.log(pie)
console.log(pieNotCorrect)
var index = pie._index;
var datasetIndex = pie._datasetIndex;

并且仅在下面使用:

 var pie = this.getElementAtEvent(e)[0];

否则你的代码工作正常

var ctx = $('#open_chart');
var chart = new Chart(ctx, {
  type: 'pie',
  data: {
    datasets: [{
      data: [1, 5],
      backgroundColor: ['red', 'blue'],
      weight: 1
    }],
    labels: ['Minor', 'Other']
  },
  options: {
    responsive: true,
    title: {
      display: true,
      text: 'Title',
      position: 'bottom',
      fontSize: 15,
      fontColor: '#000000'
    },
    legend: {
      display: false
    },
onHover: function(event, chartElement) {
  event.target.style.cursor = chartElement[0] ? 'pointer' : 'default';
				},
onClick: function(e) {
var activePoints = this.getElementsAtEvent(e);

    var selectedIndex = activePoints[0]._index; 
     alert("Label : " + this.data.labels[selectedIndex] + " Value : " + this.data.datasets[0].data[selectedIndex]);
 
   
}
 }
});



var newDataset = {
  data: [1, 3, 5],
  backgroundColor: ['red', 'blue', 'yellow'],
  label: 'SubStatuses',
  labels: ['Red', 'Blue', 'Yellow'],
  weight: 4
};



chart.data.datasets.push(newDataset);
chart.update();
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="chart-container" style="position: relative; height:500px; width:300px">
		<canvas id="open_chart" style="position:absolute;top:150px;" width="200" height="200"></canvas>
</div>

关于javascript - 如何在标签(数据集)上触发点击事件并传递其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57479034/

相关文章:

javascript - 如何使用 gulp test 和 karma 在浏览器中调试 Javascript 测试文件

javascript - 用 Flot 识别悬停点?

javascript - Meteor 和 ChartJS 动态创建图表

charts - 如何使用指南以编程方式突出显示 Amchart 区域

Javascript onclick 替换 div 内容的整个内部 html

javascript - 日期javascript

javascript - 保存原始图像+应用于其的可拖动模糊蒙版

javascript - React 包含数组的映射对象

javascript - 如何在jqplot折线图中设置/绘制分钟图表?

html - 如何使用外部 JSON 文件而不是 HTML 中的硬编码 JSON 文件?