これは、StackOverflow で既に尋ねた質問のフォローアップです。そのため、全体像をつかむために必ずそれを読んでください。
個別の Div 内の Google ビジュアライゼーション チャートの複数のインスタンス
したがって、このすべてを動的にしようとして、次のコードを書きました。
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 のデータのみを出力することです。これは、関数がcontainers.length
同じパラメーターのセットで 5 回 ( ) 回呼び出されていることを意味します。
アップデート:
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は正しいものを出力しているように見えますが、画面には何もレンダリングされません...
説明/提案はありますか?