Вы можете определить функцию showData
следующим образом, это также будет, если ваши наборы данных содержат более одного значения:
function showData(evt) {
const datasetIndex = chart.getElementAtEvent(event)[0]._datasetIndex;
const index = chart.getElementAtEvent(event)[0]._index;
const model = chart.getElementsAtEvent(event)[datasetIndex]._model;
console.log(model.datasetLabel, chart.config.data.datasets[datasetIndex].data[index]);
}
Вместо добавления обработчика событий (click)
непосредственно в canvas
, Я бы также предпочел определить функцию onClick
в параметрах диаграммы следующим образом:
options: {
onClick: showData,
Пожалуйста, посмотрите фрагмент исполняемого кода.
function showData(evt) {
const datasetIndex = chart.getElementAtEvent(event)[0]._datasetIndex;
const index = chart.getElementAtEvent(event)[0]._index;
const model = chart.getElementsAtEvent(event)[datasetIndex]._model;
console.log(model.datasetLabel, chart.config.data.datasets[datasetIndex].data[index]);
}
const chart = new Chart("Chart1", {
type: 'bar',
data: {
labels: ['A', 'B'],
datasets: [{
label: 'Data1',
data: [27, 22],
backgroundColor: 'red'
},
{
label: 'Data2',
data: [40, 15],
backgroundColor: 'orange'
},
{
label: 'Data3',
data: [12, 31],
backgroundColor: 'blue'
}
]
},
options: {
onClick: showData,
legend: {
display: false
},
tooltips: {
enabled: false
},
responsive: true,
scales: {
xAxes: [{
stacked: true,
}],
yAxes: [{
stacked: true,
ticks: {
beginAtZero: true
}
}]
}
}
});
canvas {
max-width: 200px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="Chart1" height="200"></canvas>