这是我已经在StackOverflow上问过的一个问题的跟进。因此,请确保您阅读一本完整的图片:

Multiple Instances of Google Visualizations Chart Inside Separate Divs

因此,为了使整个过程具有动态性,我编写了以下代码:

var containers = document.getElementsByClassName('gaugeWrapper');
    console.log(containers);
    google.load('visualization', '1', { packages: ['gauge'] });
    for(var i = 0; i < containers.length; i++) {
        var id = containers[i].getAttribute('id');
        var name = containers[i].getAttribute('data-name');
        var value = containers[i].getAttribute('data-value');
        google.setOnLoadCallback(function () { drawChart(id, name, value) });

    }

    function drawChart(id, name, value) {
        console.log(id);
        console.log(name);
        console.log(value);
        var data = google.visualization.arrayToDataTable([
          ['Label', 'Value'],
          [name, value]
        ]);

        var options = {
            width: 400, height: 120,
            redFrom: 90, redTo: 100,
            yellowFrom: 75, yellowTo: 90,
            minorTicks: 5
        };

        var chart = new google.visualization.Gauge(document.getElementById(id));
        chart.draw(data, options);
    }


这是行不通的。问题在于控制台仅输出最后一个div的数据。这意味着该函数使用相同的参数集被调用5(containers.length)次。

更新:

按照Ateszki的回答,这是我更新的代码:

    google.load('visualization', '1', { packages: ['gauge'] });
    google.setOnLoadCallback(drawChart);

    function drawChart() {
        var containers = document.getElementsByClassName('gaugeWrapper');
        for (var i = 0; i < containers.length; i++) {

            var id = containers[i].getAttribute('id');
            var name = containers[i].getAttribute('data-name');
            var value = containers[i].getAttribute('data-value');

            var data = google.visualization.arrayToDataTable([
          ['Label', 'Value'],
          [name, value]
                ]);

            var options = {
                width: 400, height: 120,
                redFrom: 90, redTo: 100,
                yellowFrom: 75, yellowTo: 90,
                minorTicks: 5
            };
            var cont = document.getElementById(id);
            console.log(cont);
            var chart = new google.visualization.Gauge(cont);
            chart.draw(data, options);
        }
    }


不幸的是,我仍然无法正常工作。现在,尽管我的console.log似乎输出了正确的东西,但屏幕上没有任何显示...

有任何解释/建议吗?

最佳答案

您绑定onload的函数将覆盖前一个函数。

也许您可以将值存储在另一个对象中,然后在一个函数中一次全部加载它们。

09-20 10:05