javascript - onClick 事件隐藏数据集 Chart.js V2

标签 javascript html chart.js legend-properties

如何从 Chart.js 制作一个 html 图例来隐藏/显示图表的 dataset,就像 Chart.js 生成的图例 本身

enter image description here

底部图例 -> Chart.js 图例

右边的图例-> HTML

我如何点击“SETOR AGILIZA”并获取与其相关的数据集隐藏/显示

我在 chat.js/core.legend.js 中找到了这段代码 core.legend

onClick: function(e, legendItem) {
            var index = legendItem.datasetIndex;
            var ci = this.chart;
            var meta = ci.getDatasetMeta(index);

            // See controller.isDatasetVisible comment
            meta.hidden = meta.hidden === null? !ci.data.datasets[index].hidden : null;

            // We hid a dataset ... rerender the chart
            ci.update();
        },

但我不知道如何让它在 html 图例中的 onClick 事件上工作

标签名称是从数据库中获取的,因此它们可以更改。

更新 1

找到这个 Github , 努力让它发挥作用

最佳答案

所以,我在这个 Post 之后做对了

这是帖子的代码

var weightChartOptions = {
        responsive: true,
        legendCallback: function(chart) {
            console.log(chart);
            var legendHtml = [];
            legendHtml.push('<table>');
            legendHtml.push('<tr>');
            for (var i=0; i<chart.data.datasets.length; i++) {
                legendHtml.push('<td><div class="chart-legend" style="background-color:' + chart.data.datasets[i].backgroundColor + '"></div></td>');                    
                if (chart.data.datasets[i].label) {
                    legendHtml.push('<td class="chart-legend-label-text" onclick="updateDataset(event, ' + '\'' + chart.legend.legendItems[i].datasetIndex + '\'' + ')">' + chart.data.datasets[i].label + '</td>');
                }                                                                              
            }                                                                                  
            legendHtml.push('</tr>');                                                          
            legendHtml.push('</table>');                                                       
            return legendHtml.join("");                                                        
        },                                                                                     
        legend: {                                                                              
            display: false                                                                     
        }                                                                                      
    };                                                                                         

    // Show/hide chart by click legend
    updateDataset = function(e, datasetIndex) {
        var index = datasetIndex;
        var ci = e.view.weightChart;
        var meta = ci.getDatasetMeta(index);

        // See controller.isDatasetVisible comment
        meta.hidden = meta.hidden === null? !ci.data.datasets[index].hidden : null;

        // We hid a dataset ... rerender the chart
        ci.update();
    };

    var ctx = document.getElementById("weightChart").getContext("2d");
    window.weightChart = new Chart(ctx, {
        type: 'line',
        data: weightChartData, 
        options: weightChartOptions
    });
    document.getElementById("weightChartLegend").innerHTML = weightChart.generateLegend();
};

这里的 secret 是第 3 行中的 legendCallback

在这个例子中他使用折线图,在我的例子中我使用条形图

所以我为列表标签更改了表格标签,这样效果更好

他强调在获取"= new Chart"的变量前加上"window"

window.weightChart = new Chart(ctx, {.....

然后通过一些 CSS,您可以获得带有隐藏/显示选项的漂亮图例

关于javascript - onClick 事件隐藏数据集 Chart.js V2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39517956/

相关文章:

javascript - jquery中如何从另一个函数调用父类的函数

javascript - 在 JavaScript 中使用正则表达式格式化圣经经文引用

html - Font Awesome 图标奇怪地没有显示在 Shopify 商店中

php - 未声明 HTML 文档的字符编码 codeigniter

javascript - Angular 图表 - 无法读取数据

javascript - 导致占位符错误换行的空格

javascript - YUI TreeView (覆盖 labelClick)

css - 数据绑定(bind)循环 knockout js,如果我想一次只显示列表中的 2 个名称,然后单击接下来的 2 个名称的按钮

javascript - Chartjs 在标签中显示不同单位的多个信息

javascript - Chartjs 中的气泡图不起作用